我有一個像這樣的熊貓資料框:
Id A B C D
1 a b c d
2 a b d
2 a c d
3 a d
3 a b c
我想通過使用相同 Id 的資訊,使用其他行中包含的值匯總 BC 和 D 列的空值。
生成的資料框應如下所示:
Id A B C D
1 a b c d
2 a b c d
3 a b c d
對于相同的 Id,第一列 (A) 中可能有不同的值。在這種情況下,我寧愿放置另一個指示此事件的值,而不是放置第一個實體。
所以對于例如
Id A B C D
1 a b c d
2 a b d
2 x c d
它成為了:
Id A B C D
1 a b c d
2 f b c d
uj5u.com熱心網友回復:
IIUC,您可以使用groupby_agg:
>>> df.groupby('Id')
.agg({'A': lambda x: x.iloc[0] if len(x.unique()) == 1 else 'f',
'B': 'first', 'C': 'first', 'D': 'first'})
A B C D
Id
1 a b c d
2 f b c d
uj5u.com熱心網友回復:
我能想到的最好方法是遍歷每個 unique Id,將其從原始資料幀中切出,并構建一個新行作為合并相關行的產物:
def aggregate(df):
ids = df['Id'].unique()
rows = []
for id in ids:
relevant = df[df['Id'] == id]
newrow = {c: "" for c in df.columns}
for _, row in relevant.iterrows():
for col in newrow:
if row[col]:
if len(newrow[col]):
if newrow[col][-1] == row[col]:
continue
newrow[col] = row[col]
rows.append(newrow)
return pd.DataFrame(rows)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325899.html
下一篇:如何在新列中分隔列
