假设我有以下DataFrame:
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 2, 3, 3, 3], 'A': [2, 2, 3, 3, 5, 2], 'B': [1, 2, 1, 3, 2, 4]})
df
Out[253]:
id A B
0 1 2 1
1 2 2 2
2 2 3 1
3 3 3 3
4 3 5 2
5 3 2 4
我想通过'id'
进行分组,并使用sum
函数对'A'
、'B'
进行聚合。但是我还想按每个'id'的A+B
总和来缩放A和B。因此,以下输出将如下所示:
id A B
0 1 0.666667 0.333333
1 2 0.625000 0.375000
2 3 0.526316 0.473684
现在,我可以做
res = df.groupby('id').agg('sum').reset_index()
scaler = res['A'] + res['B']
res['A'] /= scaler
res['B'] /= scaler
res
Out[275]:
id A B
0 1 0.666667 0.333333
1 2 0.625000 0.375000
2 3 0.526316 0.473684
这种方法相当不优雅。有没有一种方法可以将所有这些“标量”逻辑放入聚合函数中?或者有其他Pythonic和优雅的方法来实现它?涉及numpy
的解决方案也是可以接受的!