【发布时间】:2021-09-15 18:40:48
【问题描述】:
我正在尝试使用 Grouper 查找两个事件之间经过的时间,但无法这样做。请帮帮我。以下是 i/p 和预期的 o/p
输入
ID Status Datetime
A Online 24/09/2017 7:00:00 AM
A Offline 24/09/2017 7:30:00 AM
A Offline 24/09/2017 8:30:00 AM
A Online 24/09/2017 9:30:00 AM
A Offline 24/09/2017 10:00:00 AM
B Offline 24/09/2017 6:00:00 AM
B Online 24/09/2017 7:30:00 AM
B Online 24/09/2017 9:10:00 AM
B Offline 24/09/2017 9:30:00 AM
B Online 24/09/2017 9:40:00 AM
B Offline 24/09/2017 10:00:00 AM
输出
ID Hour_start Hour_end Online_time
A 24/09/2017 7:00:00 AM 24/09/2017 8:00:00 AM 1800
A 24/09/2017 8:00:00 AM 24/09/2017 9:00:00 AM 0
A 24/09/2017 9:00:00 AM 24/09/2017 10:00:00 AM 1800
B 24/09/2017 6:00:00 AM 24/09/2017 7:00:00 AM 0
B 24/09/2017 7:00:00 AM 24/09/2017 8:00:00 AM 1800
B 24/09/2017 8:00:00 AM 24/09/2017 9:00:00 AM 3600
B 24/09/2017 9:00:00 AM 24/09/2017 10:00:00 AM 3000
使用 Pandas Grouper
df_output = df.groupby(['ID',pd.Grouper(key='Datetime', freq='H'),'status'])['event_time'].diff().dt.seconds.fillna(0)
但这并没有考虑到Status列的Online&Offline的情况
请帮帮我。 TIA
【问题讨论】:
-
输出中的
Hour_start,Hour_end与初始df 中的Datetime列之间的关系是什么? -
Hour_start&Hour_end是 ID 存在的一小时间隔。Datetime是ID活动状态的时间戳(在线/离线) -
@wwnde 你还需要什么吗?你能帮忙吗?
-
好的尽快恢复
-
为什么输出开始时间的第一个 B 是早上 7 点而不是早上 6 点?