如何解决如何在更改之前计算进程的总长度-在python中?
这是一段数据框,看起来像这样(原始数据框包含8k行):
User State change_datetime endstate
---------------------------------------------------------
100234 XIM 2016-01-19 17:03:12 Inactive
100234 Active 2016-01-28 17:17:15 XIM
100234 Active 2016-02-16 17:57:50 NaN
100234 Live 2018-03-04 06:30:01 Active
213421 XIM 2016-02-16 17:57:53 NaN
213421 Active 2018-02-01 10:01:51 XIM
213421 Active 2018-02-01 20:49:41 NaN
213421 Active 2018-02-13 20:40:11 NaN
213421 R 2018-03-04 05:38:51 Active
612312 B-98 2018-11-01 17:12:11 XIM
我试图找出每个唯一用户在“活动”状态下花费多长时间,直到他们变为“活动”以外的其他状态。是否可以创建一个循环来生成一个列表,该列表指示唯一的用户以及该用户在更改状态之前花费为“活动”时间的时间?
为了计算时间长度,我发现用户在最后一次被视为“活动”时的最后一个“ change_datetime”值与用户处于“活动”状态的第一个“ change_datetime”之间的差异。
例如: 用户“ 100234”花费了19天,0小时40分钟和35秒,处于“活动”状态
谢谢。
解决方法
如果您始终只有一个会话,则只需要两个条件:
df["change_datetime"] = pd.to_datetime(df["change_datetime"])
cond1 = df["State"].eq("Active")
cond2 = df["State"].shift(-1).ne("Active")
start = df.loc[cond1].groupby("User")["change_datetime"].first()
end = df.loc[cond1&cond2].groupby("User")["change_datetime"].first()
print (end-start)
User
100234 19 days 00:40:35
213421 12 days 10:38:20
Name: change_datetime,dtype: timedelta64[ns]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。