Pandas 数据帧聚合

Pandas Dataframe Aggregation

我有以下数据框(我没有在这里包含索引,但显然还有一个索引)

ID_1 ID_2 Count
55 62 1000
62 55 1200
... ... ...

现在我想聚合这两列,因为我不关心 ID 是在 ID_1 列还是 ID_2.

列中

我想得到以下结果:

ID_1 ID_2 Count
55 62 2200
62 55 2200
... ... ...

这意味着我想对数据框中两个 ID 相同的所有行的计数列求和(不关心它们是在 ID_1 列还是 ID_2 列)。

我考虑过对数据框进行分组,但效果不佳。

我很高兴能得到任何帮助!

创建虚拟群组:

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

按行对 ID 列进行排序

df[['ID_1', 'ID_2']] = np.sort(df[['ID_1', 'ID_2']], axis=1)

现在按 ID 列分组

df.groupby(['ID_1', 'ID_2']).transform(sum)

使用 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