首页 > 解决方案 > 如何合并两个数据框以匹配匹配的第一行或下一行

问题描述

我想合并两个数据框。

一个看起来像这样的

Df1

ID date    A
1  201901  5
2  201902  6

Df2

ID date2   B
1  201812  3
1  201811  2
1  201810  1

我想要与 ID 合并,并将最近 date2 的列向后添加到 date1,例如

ID date   A  Date 2 B
1  201901 5  201812 3
1  201902 6  201812 3

有任何想法吗?

标签: pythonpandasdataframeselectmerge

解决方案


您的逻辑与您的输出不匹配,但这应该有效:

首先让我们使用一个函数来帮助我们使用 numpy 找到最接近的值,我们将遍历您的数据框列并创建一个字典。

此功能的全部功劳归于 Ubuntu

import numpy as np
def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return array[idx]




df1['date2'] = df1['date'].apply(lambda x : find_nearest(df2['date2'],x))
print(df1)
   ID    date  A   date2
0   1  201901  5  201812
1   2  201902  6  201812

现在我们使用 df1 中的 apply ` 创建 date2 列并在此合并。

new_df = pd.merge(df1,df2,on=['date2','ID'],how='left') # change behavior to get your result.
print(new_df)
    ID date    A   date2    B
0   1  201901  5  201812  3.0
1   2  201902  6  201812  NaN

推荐阅读