python - Pandas:添加一个 excel SUMIF 列,例如 =A1/SUMIF(B:B,B1,A:A)
问题描述
我有一个熊猫数据框,例如:
pet treats lbs
0 cat 2 5.0
1 dog 1 9.9
2 snek 3 1.1
3 cat 6 4.5
4 dog 1 9.4
我想添加第四列,将每种款待占该类宠物总款待的百分比。因此,第 0 行中的零食值除以匹配“猫”的宠物的所有零食的总和(每行以此类推)。
在 Excel 中,我想我会这样做:
A B C D
1 cat 2 5.0 =B1/SUMIF(A:A,A1,B:B)
2 dog 1 9.9 =B2/SUMIF(A:A,A2,B:B)
3 snek 3 1.1 =B3/SUMIF(A:A,A3,B:B)
4 cat 6 4.5 =B4/SUMIF(A:A,A4,B:B)
5 dog 1 9.4 =B5/SUMIF(A:A,A5,B:B)
任何人都知道如何使用熊猫添加这个“treat_percent”列?
pet treats lbs treat_percent
0 cat 2 5.0 33.33
1 dog 1 9.9 50.00
2 snek 3 1.1 100.00
3 cat 6 4.5 66.67
4 dog 1 9.4 50.00
到目前为止,我已经尝试过:
df['treat_percent'] = df['pet'] / df.groupby('pet')['treats'].sum()
和
df['treat_percent'] = df['pet'] / df.loc[df['pet'] == df['pet'], 'treats'].sum()
解决方案
你可以使用transform
df['treat_rate']=df.treats/df.groupby('pet').treats.transform('sum')
df
Out[153]:
pet treats lbs treat_rate
0 cat 2 5.0 0.25
1 dog 1 9.9 0.50
2 snek 3 1.1 1.00
3 cat 6 4.5 0.75
4 dog 1 9.4 0.50
推荐阅读
- listview - 在 uwp 中,当我在 c# 代码中更改数据时,它不会在前视图上更新
- python - Kivy,在Android中检测倾斜设备
- ruby - 红宝石中的数字1e18是什么意思
- netbeans - Netbeans 自动完成、搜索和其他功能不起作用
- javascript - 修复控制台中的减少
- python-3.x - 使用超时功能读取和写入 UART pyserial
- linux - 运行命令直到它在 bash 中获得值
- azure - Azure 认知服务 - 人脸 API 响应:保留字段或错误?
- swift - 如何将循环数据更新为核心数据?
- typescript - TypeScript 中的键和值类型