大Pandas根据时间戳的接近程度分组

2024-10-04 11:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由以下代码生成的数据帧:

l_dates = ['2017-01-01 19:53:36',
           '2017-01-01 19:54:36',
           '2017-01-03 18:15:13',
           '2017-01-03 18:18:11',
           '2017-01-03 18:44:35',
           '2017-01-07 12:50:48']

l_ids = list(range(len(l_dates)))

l_values = [x*1000-1 for x in l_ids]

l_data = list(zip(l_dates, l_ids, l_values))

df1_ = pd.DataFrame(data = l_data, columns = ['timeStamp', 'usageid', 'values'])

在这个版本中如下所示

             timeStamp  usageid  values
0  2017-01-01 19:53:36        0      -1
1  2017-01-01 19:54:36        1     999
2  2017-01-03 18:15:13        2    1999
3  2017-01-03 18:18:11        3    2999
4  2017-01-03 18:44:35        4    3999
5  2017-01-07 12:50:48        5    4999

我想根据密切相关的观察结果组成小组。例如,在15分钟时间间隔内的所有观察结果都应分组在一起。你知道吗

我知道我可以以两两的方式识别这些类型的观察结果,如下所示

df_user10241['timeStamp']  < pd.Timedelta(minutes=15)

但是,我无法将它们分组。我得到如下数据帧:

             timeStamp  usageid  values   session
0  2017-01-01 19:53:36        0      -1  Session1
1  2017-01-01 19:54:36        1     999  Session1
2  2017-01-03 18:15:13        2    1999  Session2
3  2017-01-03 18:18:11        3    2999  Session2
4  2017-01-03 18:44:35        4    3999  Session3
5  2017-01-07 12:50:48        5    4999  Session4

非常感谢,请提前告诉我,如果你需要进一步的信息。你知道吗


Tags: 数据idsfordatalenrange代码生成timestamp
1条回答
网友
1楼 · 发布于 2024-10-04 11:27:39

你需要cumsum

'Session'+(df.timeStamp.diff().fillna(0)/np.timedelta64(15, 'm')).gt(1).cumsum().add(1).astype(str)
Out[959]: 
0    Session1
1    Session1
2    Session2
3    Session2
4    Session3
5    Session4
Name: timeStamp, dtype: object

分配回来之后

df['Session']='Session'+(df.timeStamp.diff().fillna(0)/np.timedelta64(15, 'm')).gt(1).cumsum().add(1).astype(str)
df
Out[961]: 
            timeStamp  usageid  values   Session
0 2017-01-01 19:53:36        0      -1  Session1
1 2017-01-01 19:54:36        1     999  Session1
2 2017-01-03 18:15:13        2    1999  Session2
3 2017-01-03 18:18:11        3    2999  Session2
4 2017-01-03 18:44:35        4    3999  Session3
5 2017-01-07 12:50:48        5    4999  Session4

相关问题 更多 >