我有一个示例数据框(日期格式:YYYY-MM-DD)
Region Area Headquarter Sales Date SalesPersonId
R1 A1 H1 2500 2020-01-02 AA
R1 A1 H1 6000 2020-01-05 AA
R1 A1 H1 8000 2020-01-11 AA
R1 A1 H1 1000 2020-01-12 AA
R1 A1 H1 2000 2020-01-16 AA
R1 A1 H1 3000 2020-01-26 AA
R1 A2 H2 1000 2020-01-03 BB
R2 A2 H2 3000 2020-01-21 BB
上表的说明是一个月中不同日期创建的销售和salespersonId。
所以我必须创建
Region Area Headquarter Sales Till_week SalesPersonId
R1 A1 H1 8500 1 AA
R1 A1 H1 17500 2 AA
R1 A1 H1 19500 3 AA
R1 A1 H1 22500 4 AA
R1 A2 H2 1000 1 BB
R1 A2 H2 4000 3 BB
第二个表的解释是例如在每月的1号,4号和5号创建的。因此,它属于第一周。总结一下。在每月的8号,9号,11号,再次创建销售,该销售在第二周下降,因此将第二周的值和第一周的值相加。其余的也一样。
请帮助我解决这个问题
预先感谢
Ps:我也提到了其他类似的问题,但是我没有帮助。
答案 0 :(得分:1)
将值isocalendar
转换为周数,然后合计sum
和最后一个累加总和:
df['Date'] = pd.to_datetime(df['Date'])
df['Till_week'] = df['Date'].dt.isocalendar().week
df1 = (df.groupby(['Region','Area','Headquarter','SalesPersonId','Till_week'])['Sales']
.sum()
.groupby(level=[0,1,2,3])
.cumsum()
.reset_index())
print (df1)
Region Area Headquarter SalesPersonId Till_week Sales
0 R1 A1 H1 AA 1 8500
1 R1 A1 H1 AA 2 17500
2 R1 A1 H1 AA 3 19500
3 R1 A1 H1 AA 4 22500
4 R1 A2 H2 BB 1 1000
5 R2 A2 H2 BB 4 3000
答案 1 :(得分:0)
赞:
In [1307]: df.Date = pd.to_datetime(df.Date)
In [1309]: df['Till_Week'] = df['Date'].dt.week
In [1320]: res = df.groupby(['Region', 'Area','Headquarter', 'Till_Week', 'SalesPersonId'], as_index=False)['Sales'].sum()
In [1323]: cum_sum = res.groupby(['Region', 'Area'])['Sales'].cumsum().tolist()
In [1324]: res.Sales = cum_sum
In [1325]: res
Out[1325]:
Region Area Headquarter Till_Week SalesPersonId Sales
0 R1 A1 H1 1 AA 8500
1 R1 A1 H1 2 AA 17500
2 R1 A1 H1 3 AA 19500
3 R1 A1 H1 4 AA 22500
4 R1 A2 H2 1 BB 1000
5 R2 A2 H2 4 BB 3000