如何按周在熊猫中累计数据-累积值

时间:2020-10-02 05:38:04

标签: python pandas dataframe

我有一个示例数据框(日期格式: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:我也提到了其他类似的问题,但是我没有帮助。

2 个答案:

答案 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
相关问题