猿问

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

我想根据位置和时间戳创建会话。如果位置是新的或时间超过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 timedelta



cond1 = 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 分钟,我想要一个新会话。


回首忆惘然
浏览 161回答 1
1回答

GCT1015

您可以groupby同时Location使用 和 将pd.Grouper其分为 15 分钟间隔和位置,然后使用ngroup对每个组进行编号:df['Session'] = (df.groupby(['Location',pd.Grouper(key='Time',freq='15min')])                 .ngroup()+1)>>> df  Location                Time  Session0        A 2016-01-01 00:00:15        11        A 2016-01-01 00:05:00        12        A 2016-01-01 00:10:08        13        A 2016-01-01 00:14:08        14        A 2016-01-01 00:15:49        25        B 2016-01-01 00:15:55        36        C 2016-01-01 00:15:58        47        C 2016-01-01 00:26:55        48        C 2016-01-01 00:29:55        49        C 2016-01-01 00:31:08        5
随时随地看视频慕课网APP

相关分类

Python
我要回答