首页 > 解决方案 > 如何将函数应用于依赖于多个列的 groupby 子组?

问题描述

取以下数据框和 groupby 对象。

df = pd.DataFrame([[1, 2, 3],[1, 4, 5],[2, 5, 6]], columns=['a', 'b', 'c'])

print(df)
   a  b  c
0  1  2  3
1  1  4  5
2  2  5  6

dfGrouped = df.groupby(['a'])

我将如何应用于 groupby 对象,将和dfGrouped的每个元素相乘,然后求和。所以对于这个例子,对于组和组。bc2*3 + 4*5 = 2615*6 = 300

所以我想要的 groupby 对象的输出是:

   a  f
0  1  26
2  2  30

标签: pythonpandasdataframepandas-groupby

解决方案


如果需要多个所有列而不a使用DataFrame.prod聚合sum

df = df.drop('a', 1).prod(axis=1).groupby(df['a']).sum().reset_index(name='f')
print (df)
   a   f
0  1  26
1  2  30

辅助列的替代方案:

df = df.assign(f = df.drop('a', 1).prod(axis=1)).groupby("a", as_index=False).f.sum()

如果只需要多个列,一个想法是使用评论中的@sammywemmy 解决方案:

df = df.assign(f = df.b.mul(df.c)).groupby("a", as_index=False).f.sum()
print (df)
   a   f
0  1  26
1  2  30
    

推荐阅读