gpt4 book ai didi

python - Pandas df 中每个用户的两个事件行之间的时间差

转载 作者:行者123 更新时间:2023-12-04 04:16:42 28 4
gpt4 key购买 nike

我有一个数据框如下:

    imei    event_type               time   
1107 alarm 2020-01-28 11:32:42+00:00
1107 alarm_restored 2020-01-28 11:32:53+00:00
1107 alarm_emergency 2020-01-28 11:33:03+00:00
1107 alarm_emergency_restored 2020-01-28 11:33:06+00:00
1108 alarm 2020-01-28 11:42:42+00:00
1108 alarm_restored 2020-01-28 11:43:53+00:00
1109 alarm_emergency 2020-01-28 11:53:23+00:00
1109 alarm_emergency 2020-01-28 11:53:23+00:00
1109 alarm_emergency_restored 2020-01-28 11:57:06+00:00
1110 alarm_emergency 2020-01-29 10:23:05+00:00
1111 alarm_restored 2020-01-29 11:10:53+00:00
1112 alarm_emergency_restored 2020-01-29 12:13:23+00:00

我想找出每个用户的警报和恢复类型事件之间的时间差。我不知道如何进行。我试过 calculate the time difference between two consecutive rows in pandas我试过了

    df_alarm['time'].diff(3)

得到了:

    0                              NaT
1 NaT
2 NaT
3 0 days 00:00:23.706000
4 0 days 00:27:28.364000
...

这不是我预期的结果。我想要以分钟/秒为单位的结果

更新:

我想在每个连续的警报和 alarm_restored、alarm_emergency 和 alarm_emergency_restored 中找到时间差,前提是它们是连续的行。所有其他行都应该是 NaT。

预期输出:

    imei    event_type               time                       time_diff
1107 alarm 2020-01-28 11:32:42+00:00 NaT
1107 alarm_restored 2020-01-28 11:32:53+00:00 00:00:11
1107 alarm_emergency 2020-01-28 11:33:03+00:00 NaT
1107 alarm_emergency_restored 2020-01-28 11:33:06+00:00 00:00:03
1108 alarm 2020-01-28 11:42:42+00:00 NaT
1108 alarm_restored 2020-01-28 11:43:53+00:00 00:01:11
1109 alarm_emergency 2020-01-28 11:14:27+00:00 NaT
1109 alarm_emergency 2020-01-28 11:53:23+00:00 NaT
1109 alarm_emergency_restored 2020-01-28 11:57:06+00:00 00:03:43
1110 alarm_emergency 2020-01-29 10:23:05+00:00 NaT
1111 alarm_restored 2020-01-29 11:10:53+00:00 NaT
1112 alarm_emergency_restored 2020-01-29 12:13:23+00:00 NaT

如您所见,如果之后有两个连续的 alarm_* 事件和一个恢复事件(如第 1109-1109 行),我只想找出 1109 的第 2 行和第 3 行之间的差异。

最佳答案

这会起作用。

首先你得到所有行之间的时间差。

df["timediff"] = df.groupby(df.imei)["time"].diff()

然后,您只需将非“*_restored”的所有行的 timediff 设置为 NaT(不是时间),因为您不关心从“*_restored”到任何其他警报事件的时间:

import numpy as np
df["timediff"][df.event_type.str.contains("restored") == False] = np.datetime64('NaT')

这正是您想要的。

关于python - Pandas df 中每个用户的两个事件行之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60625263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com