[英]Pandas - How to merge 2 related events in one line
我有这样的每日用户登录/注销数据:
date,user,action
2020-04-14 01:00:00,user1,login
2020-04-14 01:05:00,user2,login
2020-04-14 01:10:00,user3,login
2020-04-14 02:40:00,user2,logout
2020-04-14 02:50:00,user3,logout
2020-04-14 03:10:00,user2,login
2020-04-14 03:10:00,user1,logout
2020-04-14 03:30:00,user3,login
2020-04-14 04:20:00,user2,logout
用户可以在一天内多次登录/注销。 session 关闭,然后新的 session 打开。 (如 user2)我需要获取每个 session 的持续时间,并且没有 session id。
如何将这两个事件合并为一行:登录和登录后第一次注销。 像这样:
login_date,logout_date,user
2020-04-14 01:00:00,2020-04-14 03:10:00,user1
2020-04-14 01:05:00,2020-04-14 02:40:00,user2
2020-04-14 01:10:00,2020-04-14 02:50:00,user3
2020-04-14 03:10:00,2020-04-14 04:20:00,user2
2020-04-14 03:30:00,-,user3
国际大学联盟:
(df.assign(row=lambda x: df.action.eq('login').groupby(df['user']).cumsum())
.pivot_table(index=['row','user'], columns='action', values='date', aggfunc='first')
.reset_index('row', drop=True)
.reset_index()
)
Output:
action user login logout
0 user1 2020-04-14 01:00:00 2020-04-14 03:10:00
1 user2 2020-04-14 01:05:00 2020-04-14 02:40:00
2 user3 2020-04-14 01:10:00 2020-04-14 02:50:00
3 user2 2020-04-14 03:10:00 2020-04-14 04:20:00
4 user3 2020-04-14 03:30:00 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.