Группа Python Pandas по месяцам и годам - PullRequest
2 голосов
/ 30 октября 2019

У меня есть следующее,

import pandas as pd

data = [['AAA','2019-01-01', 10], ['AAA','2019-01-02', 20],
        ['AAA','2019-02-01', 30], ['AAA','2019-02-02', 40],
        ['BBB','2019-01-01', 50], ['BBB','2019-01-02', 60],
        ['BBB','2019-02-01', 70],['BBB','2019-02-02', 80]]

dfx = pd.DataFrame(data, columns = ['NAME', 'TIMESTAMP','VALUE'])

  NAME   TIMESTAMP  VALUE
0  AAA  2019-01-01     10
1  AAA  2019-01-02     20
2  AAA  2019-02-01     30
3  AAA  2019-02-02     40
4  BBB  2019-01-01     50
5  BBB  2019-01-02     60
6  BBB  2019-02-01     70
7  BBB  2019-02-02     80

Я пытаюсь сделать сумму по столбцу «VALUE», сгруппированному по MONTH и YEAR в столбцах «TIMESTAMP» и «NAME».

Итак, конечный желаемый результат:

  NAME   TIMESTAMP  VALUE SUM
0  AAA  2019-01-01     10  30
1  AAA  2019-01-02     20  30
2  AAA  2019-02-01     30  70
3  AAA  2019-02-02     40  70
4  BBB  2019-01-01     50 110
5  BBB  2019-01-02     60 110
6  BBB  2019-02-01     70 150
7  BBB  2019-02-02     80 150

Как мне получить этот вывод?

Спасибо.

1 Ответ

3 голосов
/ 30 октября 2019

Используйте GroupBy.transform с Series.dt.year и Series.dt.month:

d = pd.to_datetime(dfx['TIMESTAMP'])
dfx['SUM'] = (dfx.groupby(['NAME', 
                           dfx['TIMESTAMP'].dt.year, 
                           dfx['TIMESTAMP'].dt.month])['VALUE']
                 .transform('sum'))

Или месячный период на Series.dt.to_period:

dfx['SUM'] = (dfx.groupby(['NAME', dfx['TIMESTAMP'].dt.to_period('m')])['VALUE']
                 .transform('sum'))

print (dfx)
  NAME   TIMESTAMP  VALUE  SUM
0  AAA  2019-01-01     10   30
1  AAA  2019-01-02     20   30
2  AAA  2019-02-01     30   70
3  AAA  2019-02-02     40   70
4  BBB  2019-01-01     50  110
5  BBB  2019-01-02     60  110
6  BBB  2019-02-01     70  150
7  BBB  2019-02-02     80  150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...