Как разделить DateTime на год и месяц при суммировании значений? - PullRequest
1 голос
/ 28 марта 2019

У меня есть фрейм данных со столбцом Date в качестве индекса типа DateTime и значением, прикрепленным к каждой записи.

Даты разбиты на гггг-мм-дд, каждая строка - следующий день.

Пример:

Date:          x:
2012-01-01     44
2012-01-02     75
2012-01-03     62

Как бы я разделил столбец Дата на столбцы Год и Месяц, используя эти два в качестве индексов и суммируя значения всех дней месяца?

Пример ожидаемого результата:

Year:     Month:     x:
2012      1          745
          2          402
          3          453
...
2013      1          4353

Ответы [ 2 ]

3 голосов
/ 28 марта 2019

Использование Series.dt.year Series.dt.month с совокупностью sum по GroupBy.sum и rename для имен новых столбцов:

df['Date'] = pd.to_datetime(df['Date'])

df1 = df.groupby([df['Date'].dt.year.rename('Year'),
                  df['Date'].dt.month.rename('Month')])['x'].sum().reset_index()
print (df1)
   Year  Month    x
0  2012      1  181
1 голос
/ 28 марта 2019

Используйте groupby и sum:

(df.groupby([df.Date.dt.year.rename('Year'), df.Date.dt.month.rename('Month')])['x']
   .sum())

Year  Month
2012  1        181
Name: x, dtype: int64

Обратите внимание, что, если "Дата" не является столбцом типа d datetime, используйте

df.Date = pd.to_datetime(df.Date, errors='coerce')

, чтобы сначала преобразовать его.


(df.groupby([df.Date.dt.year.rename('Year'), df.Date.dt.month.rename('Month')])['x']
   .sum()
   .reset_index())

   Year  Month    x
0  2012      1  181
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...