我有一个包含date
列的Pandas DataFrame。该列的元素类型为pandas.tslib.Timestamp
。
我想按日期对数据帧进行分组,但要排除该日期更精细的时间戳信息(即按日期分组,将所有Feb 23, 2011
分组)。我知道如何用SQL来表达这一点,但对Pandas来说还很陌生。
This question的功能非常相似,但是我不理解该代码,它使用了datetime
对象。
从documentation,我什至不了解如何从Pandas Timestamp对象中检索日期。我可以将其转换为datetime
对象,但这似乎非常round回。
根据要求,df.head()
的输出:
date show network timed session_id
0 2011-12-03 02:48:52 Monk TV38 670 00003DA9-01D2-E7A9-4177-203BE6A9E2BA
1 2011-12-03 03:00:09 WBZ News TV38 205 00003DA9-01D2-E7A9-4177-203BE6A9E2BA
2 2011-12-03 03:04:04 Dateline NBC NBC 30 00003DA9-01D2-E7A9-4177-203BE6A9E2BA
3 2011-12-03 03:04:35 20/20 ABC 25 00003DA9-01D2-E7A9-4177-203BE6A9E2BA
4 2011-12-03 03:04:56 College Football FOX 55 00003DA9-01D2-E7A9-4177-203BE6A9E2BA
最佳答案
您可以使用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
您可以按以下方式分组:
g = df.groupby(pd.DatetimeIndex(df['date']).normalize())
在0.15中,您可以访问dt属性,因此可以这样写:
g = df.groupby(df['date'].dt.normalize())
关于datetime - 按日期对Pandas DataFrame进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126668/