我有一个像这样的df
a b
0 A 0.15
1 A 0.25
2 A 0.10
3 B 0.20
4 B 0.10
5 B 0.25
6 B 0.60
7 C 0.50
8 C 0.70
我想添加一个列'c',它将'b'的值乘以它在列'a'中所属的组的和。 因此第一行应为0.15*0.5(A组之和)=0.075。 这将是列'c'=b1*sumif($A$1:$A$9,A1,$B$1:$B$9)的excel公式
结果df应如下所示
a b c
0 A 0.15 0.075
1 A 0.25 0.125
2 A 0.10 0.05
3 B 0.20 0.23
4 B 0.10 0.115
5 B 0.25 0.2875
6 B 0.60 0.69
7 C 0.50 0.6
8 C 0.70 0.84
尝试groupby+transform,然后进行乘法:
df['b'] * df.groupby('a')['b'].transform('sum')
#df['c'] = df['b'] * df.groupby('a')['b'].transform('sum')
0 0.0750
1 0.1250
2 0.0500
3 0.2300
4 0.1150
5 0.2875
6 0.6900
7 0.6000
8 0.8400
Name: b, dtype: float64
尝试一些新的reindex
df['c']=df.b*df.set_index('a').b.sum(level=0).reindex(df.a).values
df
a b c
0 A 0.15 0.0750
1 A 0.25 0.1250
2 A 0.10 0.0500
3 B 0.20 0.2300
4 B 0.10 0.1150
5 B 0.25 0.2875
6 B 0.60 0.6900
7 C 0.50 0.6000
8 C 0.70 0.8400