繁体   English   中英

Pandas - 如何在一行中合并 2 个相关事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM