有哪些方法可用于合并时间戳不完全匹配的列?
DF1型:
date start_time employee_id session_id
01/01/2016 01/01/2016 06:03:13 7261824 871631182
DF2型:
date start_time employee_id session_id
01/01/2016 01/01/2016 06:03:37 7261824 871631182
我可以在['日期','员工id','会话id']加入,但有时同一个员工在同一日期会有多个相同的会话,这会导致重复。我可以删除发生这种情况的行,但如果这样做,我将丢失有效会话。
如果DF1的时间戳与DF2的时间戳相差<;5分钟,并且会话id和员工id也匹配,是否有有效的方法加入?如果有匹配的记录,那么时间戳总是比DF1稍晚,因为事件是在未来某个点触发的。
['employee_id', 'session_id', 'timestamp<5minutes']
编辑-我以为以前会有人遇到这个问题。
我在想这样做:
创建一个10分钟的间隔字符串以连接上的文件
df1['low_time'] = df1['start_time'] - timedelta(minutes=5) df1['high_time'] = df1['start_time'] + timedelta(minutes=5) df1['interval_string'] = df1['low_time'].astype(str) + df1['high_time'].astype(str)
有人知道如何把这5分钟的间隔精确到5分钟吗?
02:59:37-5分钟=02:55:00
02:59:37+5分钟=03:05:00
间隔字符串='02:55:00-03:05:00'
pd.merge(df1, df2, how = 'left', on = ['employee_id', 'session_id', 'date', 'interval_string']
有人知道怎么打发时间吗?这似乎是可行的。您仍然根据日期、员工和会话进行匹配,然后查找基本上在相同的10分钟间隔或范围内的时间
请考虑以下问题的小版本:
它给予
合并时,您希望将
df2[0:3]
视为df1[0:3]
的副本(因为它们之间的间隔分别小于5分钟),但将df1[3]
和df2[3]
视为单独的会话。解决方案1:区间匹配
这基本上就是你在编辑中的建议。要将两个表中的时间戳映射到以时间戳四舍五入到最接近的5分钟为中心的10分钟间隔。
每个间隔可以由其中点唯一地表示,因此可以合并时间戳上的数据帧,四舍五入到最接近的5分钟。例如:
哪个指纹
注意这不是完全正确的。会话
df1[2]
和df2[2]
虽然间隔只有3分钟,但它们不被视为重复。这是因为它们位于区间边界的不同侧面。解决方案2:一对一匹配
这是另一种方法,它取决于
df1
中的会话在df2
中有零个或一个重复的条件。我们将
df1
中的时间戳替换为df2
中最接近的时间戳,该时间戳与employee_id
和session_id
匹配,并且不到5分钟。哪个指纹
这种方法要慢得多,因为您必须搜索
df2
中每一行的整个df1
。我所写的可能会进一步优化,但在大型数据集上仍然需要很长时间。我会尝试在熊猫身上使用这种方法:
^{}
你感兴趣的参数是
direction
、tolerance
、left_on
和right_on
构建@Igor答案:
output
相关问题 更多 >
编程相关推荐