Python 熊猫通过时间戳的接近程度来分组
我有一个由以下代码生成的数据帧:Python 熊猫通过时间戳的接近程度来分组,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我有一个由以下代码生成的数据帧: 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_dat
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)
非常感谢,如果您需要更多信息,请告诉我。您需要
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
哇,太棒了!你能再解释一下吗。我猜我不明白
/np.timedelta64(15,'m')
那么gt(1)
这两个做什么?@clog14这是计算timedelta中包含多少个15分钟,超过1个(意味着15分钟)应该属于下一组:-)好的,谢谢我知道了。:-)还有两个简短的问题:1。我想没有直接的方法可以使用groupby来实现这一点,对吗?2.如果我有一个更compex的dataframe,它有另一个级别,比如客户,我可以将此解决方案传递给客户上的groupby操作,对吗?@clog14是的,您可以分组并将以上所有内容传递给lambda:-)有人可以回答以下问题吗,类似于这个问题,但分组不是基于接近程度。
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