我想根据位置和时间戳创建会话。如果位置是新的或时间超过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
添加回答
举报
0/150
提交
取消