【发布时间】:2021-04-25 11:46:47
【问题描述】:
我有一些跨越多天的时间序列数据,如下所示:
dr = pd.date_range('01-01-2020 9:00', '01-03-2020 23:59', freq='1T')
df = pd.DataFrame({'data': 1}, index=dr) # all ones in the data column
我有兴趣按一天中的时间分组并对数据求和(即跨日期合并数据)。我从this post 和this one 得知,您可以使用日期时间序列或索引的时间属性将数据分组到一天中的某个小时,如下所示:
df.groupby(df.index.hour).sum()
df.groupby(df.index.time).sum()
但是,我想分组为 15 分钟的垃圾箱,例如像这样(数字是任意的):
data
00:00 10
00:15 12
00:30 15
...
11:30 16
11:45 20
请注意,我不想只进行 15 分钟的重新采样(例如 df.resample('15T').sum()),因为这不会对几天内的相似时间进行分组。因此,例如,任何日期 9:00 到 9:15 之间的数据都应该放在同一个 bin 中。
我找不到可以实现此目的的时间属性。我该怎么做?
【问题讨论】:
-
dfX = df.groupby(pd.Grouper(freq='15Min')).aggregate(numpy.sum)
-
@JoeFerndz 没有将不同日期的同一时间放入同一个 bin。因此,就像 1 日 9:00 和 2 日 9:00 被放置在单独的垃圾箱中(不是我想要的)。抱歉,如果不清楚,我更新了我的帖子
-
所以你的输入可能是 00:01 3, 00:02 4, 00:008 2, 00:14 2, 00:20 5... 那么你希望 00:15 是 (3 + 4 + 2 = 9)?这必须在同一天。所以今天晚上 9 点应该放在一起,而不是和昨天晚上 9 点混在一起
-
@JoeFerndz,在您的示例中,您列出的前四次都发生在午夜和 12:15 之间,因此它们都应该被分箱,所以您应该得到
00:00 11(3+4+2 +2)。但最后一部分听起来不正确,我确实希望今天的晚上 9 点与昨天的晚上 9 点混在一起。我想查看所有时间戳,就好像它们在同一日期一样,然后在 15 分钟时重新采样,这样我就可以看到例如平均晚上 9 点在几天内的样子。到目前为止,这两个答案似乎都是正确的
标签: python pandas time-series pandas-groupby