我想在我的数据框中找到所有发生在彼此3分钟窗口内的特定商家的事件。这是一个最小的工作示例:
import pandas as pd
import numpy as np
merchant = ['A','A','A','A','A','B','B','B','B']
datetime = pd.to_datetime(([
'2018-06-11 12:00:00',
'2018-06-11 12:02:10',
'2018-06-11 12:05:32',
'2018-06-11 12:09:01',
'2018-06-12 13:01:32',
'2018-06-12 14:49:32',
'2018-06-12 14:51:44',
'2018-06-12 14:51:46',
'2018-06-12 14:51:55'
]))
ID = range(1,10)
df = pd.DataFrame({'ID':ID,'datetime':datetime,'merchant':merchant})
df['unix_time'] = df.datetime.astype(np.int64)/10**9
Idf = df.merge(df, how = 'outer', on = ['merchant']).query('abs(unix_time_x - unix_time_y)<=3*60 and ID_x<ID_y')
Idf
数据框包含我想要的结果:每一行都是一对ID
,它们在3分钟之内在merchant
处进行了转换。
ID_x datetime_x merchant ID_y datetime_y
1 1 2018-06-11 12:00:00 A 2 2018-06-11 12:02:10
26 6 2018-06-12 14:49:32 B 7 2018-06-12 14:51:44
27 6 2018-06-12 14:49:32 B 8 2018-06-12 14:51:46
28 6 2018-06-12 14:49:32 B 9 2018-06-12 14:51:55
31 7 2018-06-12 14:51:44 B 8 2018-06-12 14:51:46
32 7 2018-06-12 14:51:44 B 9 2018-06-12 14:51:55
36 8 2018-06-12 14:51:46 B 9 2018-06-12 14:51:55
由于我只想要在同一商家发生的交易,我想我可以在groupby中做到这一点。我的实际数据要大得多,所以在我的示例中进行外连接和过滤是不可能的。
我可以执行与在groupby中显示的操作相同的操作吗?