首页 > 解决方案 > 如何过滤 Dataframe 列中的时间以输出行并计算另一行的不同值?

问题描述

我有一个包含两列时间和状态的数据框。为了创建时间,我拆分了一个日期和时间列以创建一个新列,如下所示。新的时间列以 HH:MM:SS 格式记录。

data['time'] = pd.to_datetime(data['date']).dt.time

有两种状态,转发回复,我希望为每个状态获取 len() 计数,以获取 9:00:00 到 13:00:00 之间的值。我尝试了 between_time 方法,但它需要一个日期时间索引。有什么想法可以提供帮助吗?

样本数据

对于这个示例,我使用了 pd.DataFrame.head()。我编辑了与问题相关的时间。

State      time
0       Reply  04:01:00
1       Reply  08:04:00
2       Forward  09:05:00
3       Forward  12:06:00
4       Reply  13:07:00

预期输出

(9:00:00 和 13:00:00)

前锋 = 800

回复 = 200

标签: pythonpandasdataframedatetimelogic

解决方案


我根据一些评论和新的示例数据编辑了我的答案:

d = {'State':['Reply', 'Reply', 'Forward', 'Forward', 'Reply'], 'time': ['04:01:00', '08:04:00', '09:05:00', '12:06:00', '13:07:00']}
data = pd.DataFrame(data=d)

>          State      time
>     0    Reply  04:01:00
>     1    Reply  08:04:00
>     2  Forward  09:05:00
>     3  Forward  12:06:00
>     4    Reply  13:07:00

between_time要求数据帧的索引具有正确的日期时间格式:

data.index = pd.to_datetime(data['time'])

>                            State      time
>     time                                  
>     2019-10-19 04:01:00    Reply  04:01:00
>     2019-10-19 08:04:00    Reply  08:04:00
>     2019-10-19 09:05:00  Forward  09:05:00
>     2019-10-19 12:06:00  Forward  12:06:00
>     2019-10-19 13:07:00    Reply  13:07:00

最后,您可以使用该between_time功能来获得您想要的东西:

data['State'].between_time('09:00:00', '13:00:00').value_counts()

> Forward    2

推荐阅读