为了账号安全,请及时绑定邮箱和手机立即绑定

根据时间戳和不同位置创建会话

根据时间戳和不同位置创建会话

回首忆惘然 2021-09-11 17:57:57
我想根据位置和时间戳创建会话。如果位置是新的或时间超过15 分钟的间隔,则将新会话分配给数据帧中的记录。下面的例子Location      |               Time                  |     Session    A                   2016-01-01 00:00:15                  1    A                   2016-01-01 00:05:00                  1    A                   2016-01-01 00:10:08                  1    A                   2016-01-01 00:14:08                  1    A                   2016-01-01 00:15:49                  2         B                   2016-01-01 00:15:55                  3    C                   2016-01-01 00:15:58                  4    C                   2016-01-01 00:26:55                  4    C                   2016-01-01 00:29:55                  4    C                   2016-01-01 00:31:08                  5这是对给定问题不起作用的代码。from datetime import timedeltacond1 = df.DateTime-df.DateTime.shift(1) > pd.Timedelta(15, 'm')#OR#15_min = df.DateTime.diff() > pd.Timedelta(minutes=15)cond2 = df.location != df.location.shift(1)session_id = (cond1|cond2).cumsum()df['session_id'] = session_id.map(pd.Series(range(0,10000))) 如果找到新位置或当前位置还有 15 分钟,我想要一个新会话。
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以groupby同时Location使用 和 将pd.Grouper其分为 15 分钟间隔和位置,然后使用ngroup对每个组进行编号:


df['Session'] = (df.groupby(['Location',pd.Grouper(key='Time',freq='15min')])

                 .ngroup()+1)


>>> df

  Location                Time  Session

0        A 2016-01-01 00:00:15        1

1        A 2016-01-01 00:05:00        1

2        A 2016-01-01 00:10:08        1

3        A 2016-01-01 00:14:08        1

4        A 2016-01-01 00:15:49        2

5        B 2016-01-01 00:15:55        3

6        C 2016-01-01 00:15:58        4

7        C 2016-01-01 00:26:55        4

8        C 2016-01-01 00:29:55        4

9        C 2016-01-01 00:31:08        5


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信