Dav*_*ard 6 datetime group-by python-2.7 pandas
我有一个包含date列的Pandas DataFrame .该列的元素是类型pandas.tslib.Timestamp.
我想按日期对数据帧进行分组,但是要排除那个日期更精细的时间戳信息(即按日期分组,所有Feb 23, 2011分组都是如此).我知道如何在SQL中表达这一点,但对Pandas来说却是一个新手.
这个问题非常相似,但我不理解代码,它使用datetime对象.
从文档中,我甚至不了解如何从Pandas Timestamp对象中检索日期.我可以转换为datetime对象,但这看起来非常迂回.
根据要求,输出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
Run Code Online (Sandbox Code Playgroud)
And*_*den 14
您可以使用normalizeDatetimeIndex方法(将其带到当天的午夜):
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
Run Code Online (Sandbox Code Playgroud)
你可以这样组合:
g = df.groupby(pd.DatetimeIndex(df['date']).normalize())
Run Code Online (Sandbox Code Playgroud)
在0.15中你可以访问dt属性,所以可以这样写:
g = df.groupby(df['date'].dt.normalize())
Run Code Online (Sandbox Code Playgroud)
小智 6
不清楚您是尝试分组和聚合(如在 SQL 中)还是创建带有日期而不是时间戳的索引。
如果你想分组和聚合,你可以这样做:
df.groupby(df.set_index('date').index.date).mean()
Run Code Online (Sandbox Code Playgroud)
时间序列索引具有日期时间属性,如日期、日期等。这将聚合计时列,因为它是唯一的数字列。
如果您尝试创建具有日期级别的索引,您可以执行以下操作:
import datetime
df.set_index(['date', df.date.apply(lambda x: datetime.datetime.date(x))], inplace=True)
df.index.names = ['timestamp', 'daydate']
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个带有时间戳和日期的多索引。如果您不希望索引是永久性的,请删除 inplace= 参数。
| 归档时间: |
|
| 查看次数: |
9160 次 |
| 最近记录: |