匹配大熊猫时间戳的范围

时间:2015-05-29 19:39:49

标签: python pandas

我在pandas中遇到这个问题

DF1(我的左连接):

Name |     TimeStart        | TimeEnd               | Values   | Order
John   12/24/2014 08:10:32    12/24/2014 08:14:21        2        1
John   12/24/2014 08:15:03    12/24/2014 08:22:49        2        2

DF2

Name |     TimeStart        | TimeEnd               | Values
John   12/24/2014 08:12:57    12/24/2014 08:13:31        8

DF2中的TimeStart始终大于DF1中的TimeStart(这通常发生在交互期间)。为了匹配,它必须小于该个人的下一行数据。

这是我的思考过程。将行移到列以查看它们是否匹配。然后将DF2 TimeStart比较为>而不是DF1上的初始TimeStart,但小于下一行TimeStart(相同名称)。

df1.sort(['Name', 'TimeStart'], ascending=[1, 1], inplace = True)
df1['Name_R'] = df1['Name'].shift(-1)
df1['Matching Row'] = np.where((df1['Name_R'] == df1['Name']), 1, 0)
df1['Next Timestamp'] = np.where(df1['Matching Row'] == 1, df1['TimeStart'].shift(-1), np.datetime64('nat'))
df1['test'] = np.where(df2['TimeStart'] > df1['TimeStart'] < df1['Next Timestamp'], 1, 0)

编辑 - 是否可以使用asof命令执行此操作?唯一的技巧是Name必须匹配,然后我们在每个文件/数据帧上查找TimeStart的最接近的时间戳。

1 个答案:

答案 0 :(得分:1)

有一个"asof join" in pandas 0.19。对于您的示例,只需忽略开始时间并按最近结束时间加入。

pd.merge_asof(DF1, DF2, on='TimeEnd')