Группировка фрейма данных 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=.