首页 > 解决方案 > 如何按总和结果将分组分配给 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 和相应日历年分组的求和运算的结果。

谢谢你。

标签: pythonpandas

解决方案


我们在这里做支点我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

推荐阅读