#python #pandas #datetime #dataframe
#python #pandas #datetime #dataframe
Вопрос:
У меня есть фрейм данных со столбцом даты в качестве индекса в качестве типа DateTime и значением, прикрепленным к каждой записи.
Даты разделяются на гггг-мм-дд, причем каждая строка соответствует следующему дню.
Пример:
Date: x:
2012-01-01 44
2012-01-02 75
2012-01-03 62
Как бы я разделил столбец Date на столбцы Year и Month, используя эти два в качестве индексов, а также суммируя значения всех дней в месяце?
Пример ожидаемого результата:
Year: Month: x:
2012 1 745
2 402
3 453
...
2013 1 4353
Ответ №1:
Используйте Series.dt.year
Series.dt.month
с aggregate sum
by 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
Ответ №2:
Используйте 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
Обратите внимание, что если «Date» не является столбцом datetime dtype, используйте
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