假设我有一个数据框 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(使用前将#替换为@)