如何根据最接近(或最近)的时间戳合并两个数据帧

2024-04-02

假设我有一个数据框 df1,其中包含“A”和“B”列。 A 是时间戳列(例如 unixtime),“B”是某个值的列。

假设我还有一个数据框 df2,其中包含“C”和“D”列。 C 也是一个 unixtime 列,D 是包含一些其他值的列。

我想模糊merge带有连接的数据帧timestamp。但是,如果时间戳不匹配(很可能不匹配),我希望它合并到可以在“C”中找到的“A”中时间戳之前的最近条目。

pd.merge 不支持这一点,我发现自己使用 to_dict() 转换数据帧,并使用一些迭代来解决这个问题。 pandas 有办法解决这个问题吗?


numpy.searchsorted()找到合适的index职位至merge on (参见文档) http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.searchsorted.html- 希望以下内容能让您更接近您正在寻找的东西:

start = datetime(2015, 12, 1)
df1 = pd.DataFrame({'A': [start + timedelta(minutes=randrange(60)) for i in range(10)], 'B': [1] * 10}).sort_values('A').reset_index(drop=True)
df2 = pd.DataFrame({'C': [start + timedelta(minutes=randrange(60)) for i in range(10)], 'D': [2] * 10}).sort_values('C').reset_index(drop=True)
df2.index = np.searchsorted(df1.A.values, df2.C.values)
print(pd.merge(left=df1, right=df2, left_index=True, right_index=True, how='left'))

                    A  B                   C   D
0 2015-12-01 00:01:00  1                 NaT NaN
1 2015-12-01 00:02:00  1 2015-12-01 00:02:00   2
2 2015-12-01 00:02:00  1                 NaT NaN
3 2015-12-01 00:12:00  1 2015-12-01 00:05:00   2
4 2015-12-01 00:16:00  1 2015-12-01 00:14:00   2
4 2015-12-01 00:16:00  1 2015-12-01 00:14:00   2
5 2015-12-01 00:28:00  1 2015-12-01 00:22:00   2
6 2015-12-01 00:30:00  1                 NaT NaN
7 2015-12-01 00:39:00  1 2015-12-01 00:31:00   2
7 2015-12-01 00:39:00  1 2015-12-01 00:39:00   2
8 2015-12-01 00:55:00  1 2015-12-01 00:40:00   2
8 2015-12-01 00:55:00  1 2015-12-01 00:46:00   2
8 2015-12-01 00:55:00  1 2015-12-01 00:54:00   2
9 2015-12-01 00:57:00  1                 NaT NaN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据最接近(或最近)的时间戳合并两个数据帧 的相关文章

随机推荐