使用Python/Pandas在csv中按小时分组,带有开始时间和结束时间日期列。

3

我刚开始接触Pandas,遇到了一些困难。 我想通过小时聚合事件(获取计数),并在事件中具有开始时间和结束时间。

例如:

一个示例:

event, start, end
soccer, 2020-01-20 00:34:00, 2020-01-20 02:34:00,
football, 2020-01-20 00:34:00, 2020-01-20 01:34:00
etc

期望输出:

00:00:00 - 2 (both began in 0th hour and went to 1st hour)
01:00:00 - 2 (both were live in 1st hour)
02:00:00 - 1 (only soccer occurred in 02 hour)

您如何解决这个问题?我尝试过重新索引、重新抽样、时间差和时间索引等方法,但都没有成功。

1个回答

2
您需要的是事件发生时段的频率分布。首先,您需要通过创建一个范围并将其展开来生成样本以获取分布:
hours = events.apply(lambda row: range(row['end'].hour - row['start'].hour + 1), axis=1).explode()

0    0
0    1
0    2
1    0
1    1
dtype: object

别忘了将结束和开始之间的差异加一,以解决栅栏误差的问题。然后只需对样本进行值计数即可。要按小时顺序获取频率而不是按降序计数,请传递sort=False

hours.value_counts(sort=False)

0    2
1    2
2    1
dtype: int64


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接