我有以下資料框(我沒有在這里包含索引,但顯然也有一個索引)
| ID_1 | ID_2 | 數數 |
|---|---|---|
| 55 | 62 | 1000 |
| 62 | 55 | 1200 |
| ... | ... | ... |
現在我想聚合這兩列,因為我不關心 ID 是在列 ID_1 中還是在 ID_2 中。
我想得到以下結果:
| ID_1 | ID_2 | 數數 |
|---|---|---|
| 55 | 62 | 2200 |
| 62 | 55 | 2200 |
| ... | ... | ... |
這意味著我想對資料框中所有行的 Count 列求和,其中兩個 ID 相同(不關心它們是在 ID_1 列還是 ID_2 列中)。
我想過對資料框進行分組,但這并不能正常作業。
我很高興得到任何幫助!
uj5u.com熱心網友回復:
創建虛擬組:
make_group = lambda x: tuple(sorted(x))
df['Count'] = df.groupby(df[['ID_1', 'ID_2']].apply(make_group, axis=1))['Count'] \
.transform('sum')
輸出:
>>> df
ID_1 ID_2 Count
0 55 62 2200
1 62 55 2200
# virtual groups
>>> df[['ID_1', 'ID_2']].apply(make_group, axis=1)
0 (55, 62)
1 (55, 62)
dtype: object
uj5u.com熱心網友回復:
按行對 ID 列進行排序
df[['ID_1', 'ID_2']] = np.sort(df[['ID_1', 'ID_2']], axis=1)
現在按 ID 列分組
df.groupby(['ID_1', 'ID_2']).transform(sum)
uj5u.com熱心網友回復:
使用 np.sort 、 groupby 和聚合對行值進行排序。下面的代碼
df=df.assign(Count=pd.DataFrame(np.sort(df.values), columns=df.columns).groupby(['ID_1','ID_2']).transform('sum'))
或者使用 agg('sort') 進行排序然后 groupby
df[df.filter(regex='^ID').columns] =df.filter(regex='^ID').agg('sort')
df['Count']=df.groupby(['ID_1','ID_2']).transform('sum')
ID_1 ID_2 Count
0 55 62 2200
1 62 55 2200
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386207.html
標籤:Python 熊猫 数据框 pandas-groupby 聚合
