如何根据python中最近的时间戳将两个不同长度的数据帧左键连接起来,而不丢失任何行?
我想根据时间戳合并两个数据帧。两个数据帧中的时间戳并不完全相同。我想根据最接近的时间戳合并右数据帧和左数据帧,并在时间戳超出容差限制的地方使用NaN。如果使用asof(),将丢失超出公差限制的所有行如何根据python中最近的时间戳将两个不同长度的数据帧左键连接起来,而不丢失任何行?,python,pandas,dataframe,join,merge,Python,Pandas,Dataframe,Join,Merge,我想根据时间戳合并两个数据帧。两个数据帧中的时间戳并不完全相同。我想根据最接近的时间戳合并右数据帧和左数据帧,并在时间戳超出容差限制的地方使用NaN。如果使用asof(),将丢失超出公差限制的所有行 df_left['timestamp'] = [1.1, 2.1, 3.1, 4.1, 5.1] df_left['value1'] = [10, 20, 30, 10, 30] df_right['timestamp'] = [1.05, 2.2, 4.1, 5.12]
df_left['timestamp'] = [1.1, 2.1, 3.1, 4.1, 5.1]
df_left['value1'] = [10, 20, 30, 10, 30]
df_right['timestamp'] = [1.05, 2.2, 4.1, 5.12]
df_right['value2'] = [200, 400, 500, 200]
想要的输出:
df_merged['timestamp'] = [1.1, 2.1, 3.1, 4.1, 5.1]
df_merged['value1'] = [10, 20, 30, 10, 30]
df_merged['value2'] = [200, 400, NaN, 500, 200]
对我来说,工作顺利:
在
df_left['value1']
中有6个值,您认为样本数据中应该有5个值吗?是的,您是对的。这是个愚蠢的错误,对不起。改变了,是的;它起作用了。我真的不知道我哪里出错了。我试图使用时间戳索引加入它们,但由于某种原因,它没有按我希望的方式工作。我把它改成了专栏,它成功了。谢谢@啊-太棒了!如果我的回答有帮助,别忘了。谢谢
df_left = pd.DataFrame()
df_right = pd.DataFrame()
df_left['timestamp'] = [1.1, 2.1, 3.1, 4.1, 5.1]
df_left['value1'] = [10, 20, 30, 10, 30]
df_right['timestamp'] = [1.05, 2.2, 4.1, 5.12]
df_right['value2'] = [200, 400, 500, 200]
print(df_left)
print(df_right)
df = pd.merge_asof(df_left, df_right, on='timestamp', direction='nearest', tolerance=0.3)
print (df)
timestamp value1 value2
0 1.1 10 200.0
1 2.1 20 400.0
2 3.1 30 NaN
3 4.1 10 500.0
4 5.1 30 200.0