DataFrame中的时间计算和操作分组

时间:2018-11-02 03:15:08

标签: python pandas

我有一个数据框,其中包含用户,操作以及用户执行操作的时间。如果它们同时满足以下两个条件,我想将它们分组到一个列表中: 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分钟,

有关如何执行此操作的任何建议?非常感谢您!

1 个答案:

答案 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']]