python - 按一天中的时间分组数据

标签 python pandas group-by time-series

我有一个带有日期时间索引的数据框: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/

相关文章:

python - 来自 Groupby Python 的多列数据透视表

python - Pandas ,对于一列中的每个唯一值,在另一列中获取唯一值

python - 如何使用azureml中上传到pandas的数据集进行分析?

python - Pandas/Python 过滤 DF 的列值

python - pandas 获得每个类别的最多 3 个分数行

javascript - 执行使用 python smtplib 发送的电子邮件的 Javascript

python - pylab/networkx;更新后没有显示节点标签

python - 用于验证科学记数法的正则表达式

python - 循环 10 小时后出现 KeyError

mysql - 根据条件将表与自身连接 t-sql