首页 > 解决方案 > DataFrame中的时间计算和动作分组

问题描述

我有一个数据框,其中包含用户、操作和用户采取操作的时间。如果它们同时满足以下两个条件,我想将操作分组到一个列表中: 1. 同一用户采取的行动 2. 20 分钟内采取的行动。

目前我正在尝试使用 timedelta 来计算迭代的时间差并阅读这篇文章,但这不是我想要的。我很难找到类似的例子。

数据框有数千行,这是其中的一部分

user    action      time
A       browse      2018-07-01 06:00:00
A       edit        2018-07-01 06:10:00
B       signin      2018-07-01 06:00:00
B       browse      2018-07-01 06:11:00
B       edit        2018-07-01 07:00:00

预期输出将是满足条件的操作列表

output
[[browse, edit], [signin, browse]]

用户 B 所做的最后一次“编辑”不在其中,因为 (07:00:00) - (06:11:00) > 20 分钟

关于如何做到这一点的任何建议?非常感谢您的先进!

标签: pythonpandas

解决方案


你可以使用的IIUC,

df['time'] = pd.to_datetime(df.time) 

cond = df.groupby('user')['time'].diff().bfill().lt(pd.Timedelta('20m'))

df1 = df[cond].groupby('user')['action'].apply(list).tolist()

print (df1)

[['browse', 'edit'], ['signin', 'browse']]

推荐阅读