我有一个按以下方式配置的数据框:date_string | type | amount 2015-01-01 | a | 500 2015-01-01 | b | 300 2015-01-01 | c | 200 2015-01-02 | a | 400 2015-01-02 | b | 600 2015-01-02 | c | 100我希望添加一个按日期细分的百分比总数的新列,并得到如下内容:date_string | type | amount | percent 2015-01-01 | a | 500 | 0.5 2015-01-01 | b | 300 | 0.3 2015-01-01 | c | 200 | 0.2 2015-01-02 | a | 300 | 0.3 2015-01-02 | b | 600 | 0.6 2015-01-02 | c | 100 | 0.1
2 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
使用GroupBy.transform
with sum
,除以原始列除以Series.div
:
df['percent'] = df['amount'].div(df.groupby('date_string')['amount'].transform('sum'))
print (df)
date_string type amount percent
0 2015-01-01 a 500 0.500000
1 2015-01-01 b 300 0.300000
2 2015-01-01 c 200 0.200000
3 2015-01-02 a 400 0.363636
4 2015-01-02 b 600 0.545455
5 2015-01-02 c 100 0.090909
鸿蒙传说
TA贡献1865条经验 获得超7个赞
这将工作
import numpy as np
df.groupby(['amount', 'date_string']).sum().transform(lambda x: x/np.sum(x))
添加回答
举报
0/150
提交
取消