Суммирование по всем предыдущим значениям кадра данных в Python - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть данные, которые выглядят так:

Year         Month          Region           Value
1978           1             South             1
1990           1             North             22
1990           2             South             33
1990           2             Mid W             12
1998           1             South             1
1998           1             North             12
1998           2             South             2
1998           3             South             4
1998           1             Mid W             2
.
.

up to
2010
2010

Моя конечная дата - 2010, но я хочу суммировать все Значения по Регион и Месяц путем сложения всех значений предыдущего года.

Мне нужна не просто обычная суммарная сумма, а ежемесячная совокупная сумма по регионам , где 1-й месяц южного региона - это совокупный 1-й месяц южного региона всех предыдущих 1-го месяца перед ним и т. Д. ...

Желаемый вывод - что-то вроде:

Month          Region        Cum_Value
 1             South            2
 2             South            34
 3             South            4
 .
 .
 1             North            34
 2             North            10
 .
 .
 1             MidW              2
 2             MidW              12

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вот еще одно решение, которое больше соответствует ожидаемому результату.

df = pd.DataFrame({'Year': [1978,1990,1990,1990,1998,1998,1998,1998,1998],
              'Month': [1,1,2,2,1,1,2,3,1],
              'Region': ['South','North','South','Mid West','South','North','South','South','Mid West'],
              'Value' : [1,22,33,12,1,12,2,4,2]})

#DataFrame Result
    Year  Month Region  Value
0   1978    1   South    1
1   1990    1   North    22
2   1990    2   South    33
3   1990    2   Mid West 12
4   1998    1   South    1
5   1998    1   North    12
6   1998    2   South    2
7   1998    3   South    4
8   1998    1   Mid West 2

Код для запуска:

df1 = df.groupby(['Month','Region']).sum()
df1 = df1.drop('Year',axis=1)
df1 = df1.sort_values(['Month','Region'])

#Final Result

Month   Region  Value
1      Mid West  2
1      North     34
1      South     2
2      Mid West  12
2      South     35
3      South     4
0 голосов
/ 09 ноября 2018

Использование pd.DataFrame.groupby с pd.DataFrame.cumsum

df1['cumsum'] = df1.groupby(['Month', 'Region'])['Value'].cumsum()

Результат:

   Year  Month Region  Value  cumsum
0  1978      1  South    1.0     1.0
1  1990      1  North   22.0    22.0
2  1990      2  South   33.0    33.0
3  1990      2  Mid W   12.0    12.0
4  1998      1  South    1.0     2.0
5  1998      1  North   12.0    34.0
6  1998      2  South    2.0    35.0
7  1998      3  South    4.0     4.0
8  1998      1  Mid W    2.0     2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...