我有一个数据框,其中包含用户,操作以及用户执行操作的时间。如果它们同时满足以下两个条件,我想将它们分组到一个列表中: 1。动作是由同一用户执行的 2.在20分钟内采取了行动。
目前,我正尝试使用timedelta来计算迭代的时差并阅读this帖子,但这不是我想要的。我很难找到类似的例子。
数据框有数千行,这是其中的一部分
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]]
由于(07:00:00)-(06:11:00)> 20分钟,
有关如何执行此操作的任何建议?非常感谢您!
答案 0 :(得分:2)
您可以使用的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']]