基于时间戳列合并两个数据帧

时间:2021-03-25 02:13:38

标签: python pandas dataframe

我正在尝试将两个 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,但这也没有完成我想要的。有没有人知道我可以在这里做什么?提前致谢。

0 个答案:

没有答案