groupby 转换与 lambda

groupby transfrom with lambda

我有以下 table:

df = pd.DataFrame({"A":['CH','CH','NU','NU','J'],
                   "B":['US','AU','Q','US','Q'],
                   "TOTAL":[10,13,3,1,18]})

我想得到B相对于A的总和的比率。所以最终结果应该是:

我做的是:

df['sum'] = df.groupby(['A'])['TOTAL'].transform(np.sum)
df['ratio'] = df['TOTAL']/df['sum']*100

问题:如何使用 lambda 实现这一点(或者有更好的方法)。

如果你想使用 lambda,你可以在里面做除法 transform:

df['ratio'] = df.groupby('A')['TOTAL'].transform(lambda x: x / x.sum() * 100)

输出:

    A   B  TOTAL  sum       ratio
0  CH  US     10   23   43.478261
1  CH  AU     13   23   56.521739
2  NU   Q      3    4   75.000000
3  NU  US      1    4   25.000000
4   J   Q     18   18  100.000000

但是这样比较慢(因为我们去group-by-group)。如果我是你,我会选择你的代码而不是这个。