Python Group BY Cumsum - PullRequest
       15

Python Group BY Cumsum

0 голосов
/ 31 августа 2018

У меня есть этот DataFrame:

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.

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Попробуйте:

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
0 голосов
/ 31 августа 2018

код:

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
...