【发布时间】:2022-11-15 10:05:14
【问题描述】:
我有一组带有连接/断开时间的电话记录,我想找出数据中时间段内每一秒的并发通话数。然后我想使用该并发呼叫数据来获取白天的高峰呼叫时间。
我有一个工作示例,但是在一周的数据中以 1 秒的时间增量进行迭代需要永远。
示例数据框:
df
dateTimeConnect dateTimeDisconnect
0 2020-11-07 08:01:02 2020-11-07 08:02:39
1 2020-11-07 08:01:19 2020-11-07 08:02:08
2 2020-11-07 08:01:44 2020-11-07 08:02:05
3 2020-11-07 08:02:10 2020-11-07 08:03:30
4 2020-11-07 08:03:01 2020-11-07 08:04:15
[5 rows x 2 columns]
获取最小和最大时间:
startTime = df.dateTimeConnect.min()
loopTime = df.dateTimeConnect.min()
endTime = df.dateTimeDisconnect.max()
totalTime = df.dateTimeDisconnect.max() - df.dateTimeConnect.min()
print(f"{startTime=}")
print(f"{endTime=}")
startTime=Timestamp('2020-11-07 08:01:02')
endTime=Timestamp('2022-11-07 08:04:15')
当 loopTime 小于 endTime 时循环,创建带有 loc 掩码的新数据帧以在那一秒获得并发调用,将 loopTime 增加 1 秒。
callsdf = pd.DataFrame()
while loopTime <= endTime:
concurrent_calls = df.loc[(df['dateTimeConnect'] <= loopTime) & (df['dateTimeDisconnect'] > loopTime)].shape[0]
print(f"{loopTime}", f"{concurrent_calls=}")
callsdf = pd.concat([callsdf, pd.Series({"datetime": loopTime, "concurrent_calls": concurrent_calls}).to_frame().T])
loopTime += timedelta(seconds=1)
结果数据框:
datetime concurrent_calls
0 2020-11-07 08:01:02 1
1 2020-11-07 08:01:03 1
2 2020-11-07 08:01:04 2
3 2020-11-07 08:01:05 2
4 2020-11-07 08:01:06 3
.. ... ...
189 2020-11-07 08:04:11 1
190 2020-11-07 08:04:12 1
191 2020-11-07 08:04:13 1
192 2020-11-07 08:04:14 1
193 2020-11-07 08:04:15 0
有没有一种更有效的方法可以用熊猫来完成?
【问题讨论】:
-
进一步添加评论,然后我认为您可以获得最大并发值,跟踪它的索引,并且可以获得最并发时间范围的开始(索引)和结束日期时间(索引+ 1)