【问题标题】:how to cumulate the data by week wise in pandas - cumulative values如何在熊猫中按周累积数据 - 累积值
【发布时间】:2020-10-02 13:55:51
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      像这样:

      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
      

      【讨论】:

        猜你喜欢
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2019-01-09
        相关资源
        最近更新 更多