Python 如何对项目和进度列值进行分组?
我已按客户、年份和月份对数据框进行分组:Python 如何对项目和进度列值进行分组?,python,pandas,Python,Pandas,我已按客户、年份和月份对数据框进行分组: my_list = ['Customer','Year','Month'] g = df.groupby(my_list)['COST'].sum() Customer Year Month COST 1000061 2013 12 122.77 2014 1 450.40 2 249.61 3
my_list = ['Customer','Year','Month']
g = df.groupby(my_list)['COST'].sum()
Customer Year Month COST
1000061 2013 12 122.77
2014 1 450.40
2 249.61
3 533.58
4 337.32
5 482.49
1000063 2013 12 875.67
2014 1 376.95
2 308.90
3 469.76
4 394.34
但是,现在我想添加两个新列(进度列成本,一个或两个positions):
- 1. 下个月的预期成本
- 2. 第2个月的预期成本
Customer Year Month COST COST_NextMonth COST_2Months
1000061 2013 12 122.77 450.40 249.61
2014 1 450.40 249.61 533.58
2 249.61 533.58 337.32
3 533.58 337.32 482.49
4 337.32 482.49 0
5 482.49 0 0
1000063 2013 12 875.67 376.95 308.9
2014 1 376.95 308.9 469.76
2 308.90 469.76 394.34
3 469.76 394.34 0
4 394.34 0 0
如何实现这一点?IIUC可与和一起使用:
下一个解决方案包括:
非常感谢你的回答。谢谢你的帮助!祝你好运
print pd.concat([g,
g.groupby(level=0).shift(-1).fillna(0),
g.groupby(level=0).shift(-2).fillna(0)], axis=1,
keys=['COST','COST_NextMonth','COST_2Months'])
COST COST_NextMonth COST_2Months
Customer Year Month
1000061 2013 12 122.77 450.40 249.61
2014 1 450.40 249.61 533.58
2 249.61 533.58 337.32
3 533.58 337.32 482.49
4 337.32 482.49 0.00
5 482.49 0.00 0.00
1000063 2013 12 875.67 376.95 308.90
2014 1 376.95 308.90 469.76
2 308.90 469.76 394.34
3 469.76 394.34 0.00
4 394.34 0.00 0.00
df['COST_NextMonth'] = g.reset_index().groupby('Customer')['COST'].shift(-1).fillna(0)
df['COST_2Months'] = g.reset_index().groupby('Customer')['COST'].shift(-2).fillna(0)
print df
Customer Year Month COST COST_NextMonth COST_2Months
0 1000061 2013 12 122.77 450.40 249.61
1 1000061 2014 1 450.40 249.61 533.58
2 1000061 2014 2 249.61 533.58 337.32
3 1000061 2014 3 533.58 337.32 482.49
4 1000061 2014 4 337.32 482.49 0.00
5 1000061 2014 5 482.49 0.00 0.00
6 1000063 2013 12 875.67 376.95 308.90
7 1000063 2014 1 376.95 308.90 469.76
8 1000063 2014 2 308.90 469.76 394.34
9 1000063 2014 3 469.76 394.34 0.00
10 1000063 2014 4 394.34 0.00 0.00