我有一个带有日期时间索引的数据框:df.head(6)
NUMBERES PRICE
DEAL_TIME
2015-03-02 12:40:03 5 25
2015-03-04 14:52:57 7 23
2015-03-03 08:10:09 10 43
2015-03-02 20:18:24 5 37
2015-03-05 07:50:55 4 61
2015-03-02 09:08:17 1 17
dataframe包含一周的数据。现在我需要计算一天中的时间段。如果时间段是 1 小时,我知道以下方法可行:
df_grouped = df.groupby(df.index.hour).count()
但是我不知道时间段是半小时的时候怎么办。如何实现?
更新:
有人告诉我这个问题类似于 How to group DataFrame by a period of time?
但是我已经尝试了提到的方法。可能是我没说清楚是我的错。 “DEAL_TIME”的范围从“2015-03-02 00:00:00”到“2015-03-08 23:59:59”。如果我使用 pd.TimeGrouper(freq='30Min')
或 resample()
,时间段的范围将从“2015-03-02 00:30”到“2015-03-08 23:30'。但我想要的是如下系列:
COUNT
DEAL_TIME
00:00:00 53
00:30:00 49
01:00:00 31
01:30:00 22
02:00:00 1
02:30:00 24
03:00:00 27
03:30:00 41
04:00:00 41
04:30:00 76
05:00:00 33
05:30:00 16
06:00:00 15
06:30:00 4
07:00:00 60
07:30:00 85
08:00:00 3
08:30:00 37
09:00:00 18
09:30:00 29
10:00:00 31
10:30:00 67
11:00:00 35
11:30:00 60
12:00:00 95
12:30:00 37
13:00:00 30
13:30:00 62
14:00:00 58
14:30:00 44
15:00:00 45
15:30:00 35
16:00:00 94
16:30:00 56
17:00:00 64
17:30:00 43
18:00:00 60
18:30:00 52
19:00:00 14
19:30:00 9
20:00:00 31
20:30:00 71
21:00:00 21
21:30:00 32
22:00:00 61
22:30:00 35
23:00:00 14
23:30:00 21
换句话说,时间段应该与日期无关。
最佳答案
为此你需要一个 30 分钟的时间分组器:
grouper = pd.TimeGrouper(freq="30T")
您还需要从索引中删除“日期”部分:
df.index = df.reset_index()['index'].apply(lambda x: x - pd.Timestamp(x.date()))
现在,您可以单独按时间分组:
df.groupby(grouper).count()
您可以在此处找到有些晦涩的 TimeGrouper
文档:pandas resample documentation (它实际上是 resample
文档,但是这两个功能使用相同的规则)。
关于python - 按一天中的时间分组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42825886/