我有一个如下数据框:
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_2
在每个组中col_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
有人知道怎么到达那里吗?
答案 0 :(得分:3)
假设您希望按组计算col_1 * col_2
的 sum ,则可以定义一个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