当时间不是python中的索引时,如何计算每小时的实例数

问题描述 投票:0回答:2

我有一个名为“strt”的数据框,其中只有一列日期时间,我想计算每小时的实例数。 DateTime 不是索引,它在名为 DT 的列中指定。因此,其他适用于计算索引的解决方案不起作用。

我试过了 strt_bar= strt.groupby(pd.Grouper(key='DT', freq='H')).count() 但它似乎适用于日期时间索引

python pandas datetime
2个回答
0
投票

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

0
投票

奔跑:

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
© www.soinside.com 2019 - 2024. All rights reserved.