【问题标题】:Python Group BY CumsumPython Group BY Cumsum
【发布时间】:2018-08-31 09:45:30
【问题描述】:

我有这个数据框:

Value  Month
 0       1
 1       2
 8       3
 11      4
 12      5
 17      6
 0       7
 0       8
 0       9
 0       10
 1       11
 2       12
 7       1
 3       2
 1       3
 0       4
 0       5

我想像这样创建新变量“Cumsum”:

Value  Month  Cumsum
 0       1       0
 1       2       1
 8       3       9 
 11      4       20
 12      5       32
 17      6
 0       7
 0       8       ...
 0       9
 0       10
 1       11
 2       12
 7       1       7
 3       2       10
 1       3       11
 0       4       11
 0       5       11

对不起,如果我的代码不干净,我没有包含我的数据框...

我的问题是我不仅有 12 行(每月 1 行),而且还有更多行。 不利的是,我知道我的桌子很整洁,我希望在第 12 个月之前获得累计金额,并在第 1 个月出现时重复此操作。

感谢您的帮助。

【问题讨论】:

    标签: python pandas group-by cumsum


    【解决方案1】:

    试试:

    df['Cumsum'] = df.groupby((df.Month == 1).cumsum())['Value'].cumsum()
    print(df)
    
         Value  Month   Cumsum
    0      0      1       0
    1      1      2       1
    2      8      3       9
    3     11      4      20
    4     12      5      32
    5     17      6      49
    6      0      7      49 
    7      0      8      49
    8      0      9      49
    9      0     10      49
    10     1     11      50
    11     2     12      52
    12     7      1       7
    13     3      2      10
    14     1      3      11
    15     0      4      11
    16     0      5      11
    

    【讨论】:

    • 我要发布相同的答案,你先这样做了。不错
    • @Nihal 谢谢 :)
    【解决方案2】:

    代码:

    df = pd.DataFrame({'value': [0, 1, 8, 11, 12, 17, 0, 0, 0, 0, 1, 2, 7, 3, 1, 0, 0],
                       'month': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5]})
    
    temp = int(len(df)/12)
    for i in range(temp + 1):
        start = i * 12
        if i < temp:
            end = (i + 1) * 12 - 1
            df.loc[start:end, 'cumsum'] = df.loc[start:end, 'value'].cumsum()
        else:
            df.loc[start:, 'cumsum'] = df.loc[start:, 'value'].cumsum()
    
    # df.loc[12:, 'cumsum'] = 12
    print(df)
    

    输出:

        value  month  cumsum
    0       0      1     0.0
    1       1      2     1.0
    2       8      3     9.0
    3      11      4    20.0
    4      12      5    32.0
    5      17      6    49.0
    6       0      7    49.0
    7       0      8    49.0
    8       0      9    49.0
    9       0     10    49.0
    10      1     11    50.0
    11      2     12    52.0
    12      7      1     7.0
    13      3      2    10.0
    14      1      3    11.0
    15      0      4    11.0
    16      0      5    11.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多