Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用apply()合并DataFrame,仅合并两列中的部分匹配_Python_Pandas - Fatal编程技术网

Python 使用apply()合并DataFrame,仅合并两列中的部分匹配

Python 使用apply()合并DataFrame,仅合并两列中的部分匹配,python,pandas,Python,Pandas,我需要合并两个数据帧,但不仅要合并精确的列值,还要合并近似的列值 例如,我有两个数据帧: import pandas as pd d = {'col1': ["a", "b", "c", "d"], 'col2': [3, 4, 66, 120]} df = pd.DataFrame(data=d) col1 col2 0 a 3 1 b 4 2 c 66 3 d 120 d2 = {'col1a': ["aa",

我需要合并两个数据帧,但不仅要合并精确的列值,还要合并近似的列值

例如,我有两个数据帧:

import pandas as pd
d = {'col1': ["a", "b", "c", "d"], 'col2': [3, 4, 66, 120]}
df = pd.DataFrame(data=d)

    col1    col2
0   a       3
1   b       4
2   c       66
3   d       120

d2 = {'col1a': ["aa", "bb", "cc", "dd"], 'col2b': [3, 4, 67, 100]}
df2 = pd.DataFrame(data=d2)
    col1a   col2b
0   aa      3
1   bb      4
2   cc      67
3   dd      100
现在,如果我简单地在
col2
col2b
列上连接它们,我只会得到两行列值完全相同的行

pd.merge(df, df2, how='inner', left_on='col2', right_on='col2b')
    col1    col2    col1a   col2b
0   a       3       aa      3
1   b       4       bb      4
现在,为了简单起见,我还想基于左数据框中整数值的+1或-1的整数合并列值。在我们的示例中,在左侧数据框中,除了值为
3
4
的行之外,值
66
应与
67
匹配到右侧数据框中的值:

        col1    col2    col1a   col2b
    0   a       3       aa      3
    1   b       4       bb      4
    2   c       66      cc      67

不确定如何解决此问题,可能需要使用
apply()

基于近似列值进行合并,这里是
merge\u asof

pd.merge_asof(df,df2,left_on='col2',right_on='col2b',tolerance = 1,direction ='nearest').dropna()
Out[7]: 
  col1  col2 col1a  col2b
0    a     3    aa    3.0
1    b     4    bb    4.0
2    c    66    cc   67.0

这只适用于整数吗?我实际上需要根据坐标值进行合并,所以我的想法是使用apply()计算坐标点(一个来自一个DF,另一个来自另一个DF)之间的距离,然后根据给定一定距离阈值的距离(以米为单位)进行合并。@ivan_bilan check scipy.distance然后