Datetime 按日期分组数据帧
我有一个包含Datetime 按日期分组数据帧,datetime,python-2.7,group-by,pandas,Datetime,Python 2.7,Group By,Pandas,我有一个包含date列的熊猫数据框。该列的元素类型为pandas.tslib.Timestamp 我希望按日期对数据帧进行分组,但不包括比该日期更精细的时间戳信息(即按日期分组,其中所有2011年2月23日都分组)。我知道如何用SQL来表达这一点,但我对Pandas还是很陌生的 做了一些非常类似的事情,但我不理解代码,它使用datetime对象 从最开始,我甚至不知道如何从Pandas Timestamp对象检索日期。我可以转换为datetime对象,但这似乎非常迂回 根据请求,df.head
date
列的熊猫数据框。该列的元素类型为pandas.tslib.Timestamp
我希望按日期对数据帧进行分组,但不包括比该日期更精细的时间戳信息(即按日期分组,其中所有2011年2月23日
都分组)。我知道如何用SQL来表达这一点,但我对Pandas还是很陌生的
做了一些非常类似的事情,但我不理解代码,它使用datetime
对象
从最开始,我甚至不知道如何从Pandas Timestamp对象检索日期。我可以转换为datetime
对象,但这似乎非常迂回
根据请求,
df.head()
的输出:
不清楚您是否正在尝试分组和聚合(如在SQL中)或创建带有日期而不是时间戳的索引 如果您正在尝试分组和聚合,您可以这样做:
df.groupby(df.set_index('date').index.date).mean()
Timeseries索引具有day、date等datetime属性,它们将聚合timed列,因为它是唯一的数字列
如果要创建日期级别的索引,可以执行以下操作:
import datetime
df.set_index(['date', df.date.apply(lambda x: datetime.datetime.date(x))], inplace=True)
df.index.names = ['timestamp', 'daydate']
这将为您提供一个带有时间戳和日期的多索引。如果您不希望索引是永久性的,请删除inplace=参数。您可以使用
normalize
DatetimeIndex方法(该方法将索引设置为当天午夜):
在0.15中,您可以访问dt属性,因此可以将其写成:
g = df.groupby(df['date'].dt.normalize())
这里欢迎您df.head()的输出我指的是groupby和aggregate。你的方法似乎比Andy Hayden的方法更通用(即,有效期不超过几天)。谢谢你,我理解,这正是我想要的。另一种选择:
pd.DatetimeIndex(df[“date”])。date
。一个优点是,许多您想要分组的常见内容都是内置的:.month
、.year
、.hour
,等等。这种方法似乎忽略了时区,但patrickrm101的不忽略。真的吗?这听起来像一个bug,它会在github上发布一个问题
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())
g = df.groupby(df['date'].dt.normalize())