Как группировать по дням и месяцам в пандах? - PullRequest
0 голосов
/ 10 июня 2019

Учитывая серию, подобную этой

    Date
2005-01-01    128
2005-01-02     72
2005-01-03     67
2005-01-04     61
2005-01-05     33
Name: Data_Value, dtype: int64

в течение нескольких лет, как мне сгруппировать все 1 января вместе, все 2 января и т. Д.?

Я на самом деле пытаюсь найти максимум для каждого дня года в течение нескольких лет, поэтому он не должен быть групповым.Если есть более простой способ сделать это, это было бы здорово.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вы можете преобразовать свой индекс в дату и время, а затем использовать strftime, чтобы получить строку в формате даты, сгруппированную по:

df.groupby(pd.to_datetime(df.index).strftime('%b-%d'))['Date_Value'].max()

Если в вашей строке даты нет NaN, вы можетенарезать, а также.Возвращает строки в формате «MM-DD»:

df.groupby(df.index.astype(str).str[5:])['Date_Value'].max()
1 голос
/ 10 июня 2019

В качестве альтернативы вы можете использовать сводную таблицу:

Сброс столбцов индекса и даты формата

df=df.reset_index()
df['date']=pd.to_datetime(df['index'])
df['year']=df['date'].dt.year
df['month']=df['date'].dt.month
df['day']=df['date'].dt.day

Смещение по столбцам месяца и дня:

df_grouped=df.pivot_table(index=('month','day'),values='Date',aggfunc='max')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...