【发布时间】:2019-05-02 03:03:56
【问题描述】:
我有一个如下的数据框:
s = pd.DataFrame({
'X':np.arange(2, 10),
'time':pd.to_datetime([
'20130101 7:34:04', '20130101 8:34:08', '20130101 10:34:08',
'20130101 12:34:15', '20130101 13:34:28', '20130101 12:34:54',
'20130101 14:34:55', '20130101 17:29:12'])
})
我想每小时或任何想要的时间间隔为time 列创建一个组 ID。我们以每小时为例,下面是我想要的(从午夜 00:00:00 开始):
X time time-group
0 2 2013-01-01 07:34:04 7
1 3 2013-01-01 08:34:08 8
2 4 2013-01-01 10:34:08 10
3 5 2013-01-01 12:34:15 12
4 6 2013-01-01 13:34:28 13
5 7 2013-01-01 12:34:54 12
6 8 2013-01-01 14:34:55 14
7 9 2013-01-01 17:29:12 17
如何有效地做到这一点?
P.S.我知道在这种特殊情况下,我可以将s.time.dt.hour 用作time-group,但我想要一个适用于任何时间间隔的通用解决方案。
【问题讨论】:
-
您需要创建一个新列还是只是想对组进行分组并执行一些聚合?
-
.dt.floor()适用于大多数任意时间段。或pd.cut -
@Chris,我需要创建一个新列。这里的解决方案对我不起作用stackoverflow.com/questions/23966152/…
-
@JasonGoal 我相信 TimeGrouper 已更改为
pd.Group()你尝试了吗s.groupby(pd.Grouper(key='time', freq='H'))['X'].sum() -
我试过了,但这仍然不能给我一个新的组 ID 列
标签: pandas datetime pandas-groupby