Группировка фрейма данных Pandas по дате
у меня есть фрейм данных Pandas, который включает в себя
2 ответов
можно использовать normalize
метод DatetimeIndex (который занимает его до полуночи в тот день):
In [11]: df['date']
Out[11]:
0 2011-12-03 02:48:52
1 2011-12-03 03:00:09
2 2011-12-03 03:04:04
3 2011-12-03 03:04:35
4 2011-12-03 03:04:56
Name: date, dtype: datetime64[ns]
In [12]: pd.DatetimeIndex(df['date']).normalize()
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-12-03 00:00:00, ..., 2011-12-03 00:00:00]
Length: 5, Freq: None, Timezone: None
и вы можете groupby это:
g = df.groupby(pd.DatetimeIndex(df['date']).normalize())
в 0.15 у вас будет доступ к атрибуту dt, поэтому вы можете написать это как:
g = df.groupby(df['date'].dt.normalize())
неясно, пытаетесь ли вы группировать и агрегировать (как в SQL) или создать индекс с датой вместо метки времени.
Если вы пытаетесь groupby и aggregrate, вы можете сделать это следующим образом:
df.groupby(df.set_index('date').index.date).mean()
индексы Timeseries имеют свойства datetime, такие как день, дата и т. д. Это будет агрегировать временный столбец, так как это единственный числовой столбец.
Если вы пытаетесь создать индекс с уровнем даты, вы можете что-то сделать например:
import datetime
df.set_index(['date', df.date.apply(lambda x: datetime.datetime.date(x))], inplace=True)
df.index.names = ['timestamp', 'daydate']
это даст вам мультииндекс с меткой времени и датой . Если вы не хотите, чтобы индекс был постоянным, удалите аргумент inplace=.