Пандас Групер против Тайм Групер
Новая версия панд устарела TimeGrouper
так что мы должны использовать обычную Grouper
,
Старый код:
df['column_name'].groupby(pd.TimeGrouper("M")).mean().plot()
отлично работает в старой версии панд. Тем не менее, ни один из:
df.groupby(pd.Grouper(key='column_name', freq="M")).mean().plot()
df['column_name'].groupby(pd.Grouper(freq="M")).mean().plot()
работает в новой версии. Eiter ключ считается отсутствующим, или панды жалуются на:
Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Float64Index'
редактировать
import pandas as pd
df = pd.DataFrame({'column_name':['2017-01-01', '2017-01-02'],
'column_value':[1,3]})
df
df.index = pd.DatetimeIndex(df.column_name)
df.index
# old version
df['column_value'].groupby(pd.TimeGrouper("M")).mean().plot()
# new version
df.groupby(pd.Grouper(key='column_value', freq="M")).mean().plot()
1 ответ
Решение
Как я сказал в комментарии, ключ должен быть datetime в grouper. Timegrouper по умолчанию преобразует его в datetime, поэтому используйте
df['column_name'] = pd.to_datetime(df['column_name'])
# new version
df.groupby(pd.Grouper(key='column_name', freq="M")).mean().plot()