【问题标题】:Cumulative Sum by date (Month)按日期累计(月)
【发布时间】:2017-03-09 09:24:40
【问题描述】:

我有一个 pandas 数据框,我需要计算每个月的累积总和。

Date    Amount
2017/01/12  50
2017/01/12  30
2017/01/15  70
2017/01/23  80
2017/02/01  90
2017/02/01  10
2017/02/02  10
2017/02/03  10
2017/02/03  20
2017/02/04  60
2017/02/04  90
2017/02/04  100

累积总和是每一天的尾随总和,即 01-31。然而,有些日子不见了。数据框应如下所示

Date    Sum_Amount
2017/01/12  80
2017/01/15  150
2017/01/23  203
2017/02/01  100
2017/02/02  110
2017/02/03  140
2017/02/04  390

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果只需要cumsum months groupbysum 则可以使用,然后按转换为month 的索引值分组:

    df.Date = pd.to_datetime(df.Date)
    df = df.groupby('Date').Amount.sum()
    df = df.groupby(df.index.month).cumsum().reset_index()
    print (df)
    
            Date  Amount
    0 2017-01-12      80
    1 2017-01-15     150
    2 2017-01-23     230
    3 2017-02-01     100
    4 2017-02-02     110
    5 2017-02-03     140
    6 2017-02-04     390
    

    但如果需要,但months and years 需要通过to_period 转换为月份:

    df = df.groupby(df.index.to_period('m')).cumsum().reset_index()
    

    更改后的df 可以更好地看出差异 - 添加了不同的年份:

    print (df)
              Date  Amount
    0   2017/01/12      50
    1   2017/01/12      30
    2   2017/01/15      70
    3   2017/01/23      80
    4   2017/02/01      90
    5   2017/02/01      10
    6   2017/02/02      10
    7   2017/02/03      10
    8   2018/02/03      20
    9   2018/02/04      60
    10  2018/02/04      90
    11  2018/02/04     100
    
    df.Date = pd.to_datetime(df.Date)
    df = df.groupby('Date').Amount.sum()
    df = df.groupby(df.index.month).cumsum().reset_index()
    print (df)
            Date  Amount
    0 2017-01-12      80
    1 2017-01-15     150
    2 2017-01-23     230
    3 2017-02-01     100
    4 2017-02-02     110
    5 2017-02-03     120
    6 2018-02-03     140
    7 2018-02-04     390
    

    df.Date = pd.to_datetime(df.Date)
    df = df.groupby('Date').Amount.sum()
    df = df.groupby(df.index.to_period('m')).cumsum().reset_index()
    print (df)
            Date  Amount
    0 2017-01-12      80
    1 2017-01-15     150
    2 2017-01-23     230
    3 2017-02-01     100
    4 2017-02-02     110
    5 2017-02-03     120
    6 2018-02-03      20
    7 2018-02-04     270
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 2015-12-06
      • 2021-12-28
      • 1970-01-01
      • 2016-04-02
      • 2020-10-21
      • 2019-07-15
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多