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)。如果我是你,我会选择你的代码而不是这个。
我有以下 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)。如果我是你,我会选择你的代码而不是这个。