提问者:小点点

熊猫:列值乘以组之和


我有一个像这样的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

共2个答案

匿名用户

尝试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