我正在尝试将两个 Pandas 数据帧组合在一起,其中它们都有一个时间戳列,其中包含一些相同的时间戳值、一些不同的以及其他几个不同的列。因为这些数据帧共享的唯一列是时间戳列,所以我想如何组合它们,如果有匹配的时间戳值,那么我只想将该行的列合并在一起。如果时间戳不同,那么我仍然想将列合并在一起,但在没有该时间戳的数据帧的列中添加 NaN。请查看下面的示例代码以获得更清晰的解释:
import numpy as np
import pandas as pd
gt = pd.DataFrame({'time':np.array([1.5, 2, 3]),
'gt_x':np.array([50, 55, 57.5]),
'gt_y':np.array([60, 65, 67.5]),
'gt_z':np.array([70, 75, 77.5])})
svo = pd.DataFrame({'time':np.array([1.5, 2.5, 3.5]),
'svo_x':np.array([11.1, 7.4, 15.7]),
'svo_y':np.array([13.2, 34.5, 32.8]),
'svo_z':np.array([17.3, 23.6, 19.9])})
i_want_this_after_merge = pd.DataFrame({'time':np.array([1.5, 2.0, 2.5, 3.0, 3.5]),
'gt_x':np.array([50, 55, np.nan, 57.5, np.nan]),
'gt_y':np.array([60, 65, np.nan, 67.5, np.nan]),
'gt_z':np.array([70, 75, np.nan, 77.5, np.nan]),
'svo_x':np.array([11.1, np.nan, 7.4, np.nan, 15.7]),
'svo_y':np.array([13.2, np.nan, 34.5, np.nan, 32.8]),
'svo_z':np.array([17.3, np.nan, 23.6, np.nan, 19.9])})
如果您无法运行代码,则上述代码示例中的数据框如下所示:
gt:
time gt_x gt_y gt_z
0 1.5 50.0 60.0 70.0
1 2.0 55.0 65.0 75.0
2 3.0 57.5 67.5 77.5
svo:
time svo_x svo_y svo_z
0 1.5 11.1 13.2 17.3
1 2.5 7.4 34.5 23.6
2 3.5 15.7 32.8 19.9
合并这两个之后,这是我正在寻找的输出:
time gt_x gt_y gt_z svo_x svo_y svo_z
0 1.5 50.0 60.0 70.0 11.1 13.2 17.3
1 2.0 55.0 65.0 75.0 NaN NaN NaN
2 2.5 NaN NaN NaN 7.4 34.5 23.6
3 3.0 57.5 67.5 77.5 NaN NaN NaN
4 3.5 NaN NaN NaN 15.7 32.8 19.9
我已经浏览了几篇似乎与这个问题相关的帖子,并尝试了一些事情,例如使用具有各种连接条件(例如“内部”)的 pandas 合并函数。我也试过 pandas.merge_asof,但这也没有完成我想要的。有没有人知道我可以在这里做什么?提前致谢。