首页 > 解决方案 > 分组后多列上的python操作

问题描述

我有一个如下的数据框:

df = {'col_1': [1,2,3,4,5,6,7,8,9,10],
      'col_2': [1,1,1,0,0,1,0,0,1,1],
      'col_3':['A','A','A','A','A','B','B','B','B','B']}
df = pd.DataFrame(df)

我想要类似的东西:

df['col_4'] =  df.groupby(['col_3'])['col_1','col_2'].transform((col_1*col_2)/sum(col_2))

这是每组中的乘法,col_1然后col_2除以总和,由 定义。预期的结果应该是:col_2col_3

df
   col_1  col_2 col_3  col_4
0      1      1     A   2.00
1      2      1     A   2.00
2      3      1     A   2.00
3      4      0     A   2.00
4      5      0     A   2.00
5      6      1     B   8.33
6      7      0     B   8.33
7      8      0     B   8.33
8      9      1     B   8.33
9     10      1     B   8.33

有谁知道怎么去那里?

标签: pythonpandasdataframepandas-groupby

解决方案


假设您希望计算分组的总和col_1 * col_2您可以定义一个GroupBy对象并使用transform+sum两次:

g = df.eval('prod=col_1*col_2').groupby('col_3')
df['col_4'] = g['prod'].transform('sum') / g['col_2'].transform('sum')

print(df)

   col_1  col_2 col_3     col_4
0      1      1     A  2.000000
1      2      1     A  2.000000
2      3      1     A  2.000000
3      4      0     A  2.000000
4      5      0     A  2.000000
5      6      1     B  8.333333
6      7      0     B  8.333333
7      8      0     B  8.333333
8      9      1     B  8.333333
9     10      1     B  8.333333

推荐阅读