首页 > 解决方案 > 将多列上的数据框连接到一列公差?

问题描述

嗨,在多列上将两个数据帧连接在一起的有效方法是什么,除了选择数字(在这种情况下为一个)之外的所有数据都不是完全匹配的?

编辑:根据 Ben 的建议,['A', 'B', 'D',] 构成 df1 和 df2 的唯一 ID,df1 上的连接应该是唯一的,并且 df1.shape != df2.shape。

IE:

df1
    A       B    C    D
1   Apple   21   10   a
2   Pear    90   12   a
3   Apple   31   11   b
4   Apple   71   14   c
5   Apple   45   15   d
6   Pear    14   13   b

df2
    A       B    E    D
1   Apple   22   50   a
2   Pear    89   46   a
3   Apple   30   56   b
4   Apple   72   60   c

加入 ['A', 'B', 'D',] 其中 B 具有容差和 +/- 1。导致

    A       B    C    D    E
1   Apple   21   10   a    50
2   Pear    90   12   a    46
3   Apple   31   11   b    56
4   Apple   71   14   c    60
5   Apple   45   15   d    NaN
6   Pear    14   13   b    NaN

标签: pandas

解决方案


merge_asof_tolerance

pd.merge_asof(df1.sort_values('B'),df2.sort_values('B'),by=['A','D'],on='B',tolerance=1,direction='nearest')

Out[306]: 
       A   B   C  D     E
0   Pear  14  13  b   NaN
1  Apple  21  10  a  50.0
2  Apple  31  11  b  56.0
3  Apple  45  15  d   NaN
4  Apple  71  14  c  60.0
5   Pear  90  12  a  46.0

推荐阅读