python - 如何按总和结果将分组分配给 Pandas 中的新列
问题描述
使用样本数据:
Calendar SKU Quantity
2017-10-01 1001 10
2017-10-01 1002 20
2017-10-01 1003 30
2017-11-01 1001 40
2017-11-01 1002 50
2017-11-01 1003 60
2018-11-01 1001 70
2018-11-01 1002 80
2018-03-01 1001 90
我想在不更改当前数据结构的情况下为 2017 年和 2018 年的数量总和创建两列,如下所示:
预期结果:
Calendar SKU Quantity Year_2017_Quantity Year_2018_Quantity
2017-10-01 1001 10 50 160
2017-10-01 1002 20 70 80
2017-10-01 1003 30 90 0
2017-11-01 1001 40 50 160
2017-11-01 1002 50 70 80
2017-11-01 1003 60 90 0
2018-11-01 1001 70 50 160
2018-11-01 1002 80 70 80
2018-03-01 1001 90 50 160
Year_2017_Quantity 和 Year_2018_Quantity 列都是按 SKU 和相应日历年分组的求和运算的结果。
谢谢你。
解决方案
我们在这里做支点我crosstab
当时正在使用merge
s=pd.crosstab(df.SKU,df.Calendar.dt.year,df.Quantity,aggfunc='sum').fillna(0).add_prefix('Year_Quantity_').reset_index()
df=df.merge(s,how='left')
Calendar SKU Quantity Year_Quantity_2017 Year_Quantity_2018
0 2017-10-01 1001 10 50.0 160.0
1 2017-10-01 1002 20 70.0 80.0
2 2017-10-01 1003 30 90.0 0.0
3 2017-11-01 1001 40 50.0 160.0
4 2017-11-01 1002 50 70.0 80.0
5 2017-11-01 1003 60 90.0 0.0
6 2018-11-01 1001 70 50.0 160.0
7 2018-11-01 1002 80 70.0 80.0
8 2018-03-01 1001 90 50.0 160.0
推荐阅读
- python - Python nfc 模块
- jquery - 更改 Ajax 获取带有输入的 JSON 密钥
- javascript - 有效的 XML 数据,但在 XMLHttpRequest 响应的 responseXML 属性中为 null
- linux - 清除 Linux 终端仿真器中的最后两个(及更多)打印行
- angular - PrimeNG 下拉列表 - 嵌套的 ng 模板
- autohotkey - AutoHotKey 太快热键按下崩溃脚本
- android - open.spotify 如何检测手机浏览器
- python - 根据显着性的部分信息找到完整的轮廓
- sql - 使用 WHERE 将 SQL 表更新到其他表
- r - 将 X 轴标签与 X 轴上的第一个刻度文本左对齐