我有一个名为“strt”的数据框,其中只有一列日期时间,我想计算每小时的实例数。 DateTime 不是索引,它在名为 DT 的列中指定。因此,其他适用于计算索引的解决方案不起作用。
我试过了 strt_bar= strt.groupby(pd.Grouper(key='DT', freq='H')).count() 但它似乎适用于日期时间索引
DatetimeIndex
并不意味着您必须将其设置为索引。我认为问题是count
,因为你只有一列(所以没有什么可计算的)。尝试替换为size
:
>>> df.groupby(pd.Grouper(key='DT', freq='H'), as_index=False).count()
Empty DataFrame
Columns: []
Index: []
>>> df.groupby(pd.Grouper(key='DT', freq='H'), as_index=False).size()
DT size
0 2019-02-04 00:00:00 12
1 2019-02-04 01:00:00 8
注意:您也可以使用
df.resample('H', on='DT').size()
输入数据:
>>> df
DT
0 2019-02-04 00:45:43
1 2019-02-04 00:46:55
2 2019-02-04 00:48:07
3 2019-02-04 00:49:19
4 2019-02-04 00:50:31
5 2019-02-04 00:51:43
6 2019-02-04 00:52:55
7 2019-02-04 00:54:07
8 2019-02-04 00:55:19
9 2019-02-04 00:56:31
10 2019-02-04 00:57:43
11 2019-02-04 00:58:55
12 2019-02-04 01:00:07
13 2019-02-04 01:01:19
14 2019-02-04 01:02:31
15 2019-02-04 01:03:43
16 2019-02-04 01:04:55
17 2019-02-04 01:06:07
18 2019-02-04 01:07:19
19 2019-02-04 01:08:31
奔跑:
strt_bar = strt.groupby(pd.Grouper(key='DT', freq='H')).size()
样本数据的结果是:
DT
2019-02-04 00:00:00 2
2019-02-04 01:00:00 1
2019-02-04 02:00:00 0
2019-02-04 03:00:00 3
2019-02-04 04:00:00 0
..
2019-02-11 01:00:00 0
2019-02-11 02:00:00 0
2019-02-11 03:00:00 5
2019-02-11 04:00:00 6
2019-02-11 05:00:00 1
Freq: H, Length: 174, dtype: int64
当然,DT列的数据类型是datetime64。
如果你想省略具有 0 值的组(小时 其中不包含源数据),运行:
result = strt_bar[strt_bar > 0]
这次的结果是:
DT
2019-02-04 00:00:00 2
2019-02-04 01:00:00 1
2019-02-04 03:00:00 3
2019-02-11 03:00:00 5
2019-02-11 04:00:00 6
2019-02-11 05:00:00 1
dtype: int64