首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pandas从另一列与多个输入之间最接近的匹配中查找一列的值

使用pandas从另一列与多个输入之间最接近的匹配中查找一列的值
EN

Stack Overflow用户
提问于 2020-04-14 22:58:59
回答 1查看 27关注 0票数 1

我有两个数据帧,一个是参考,我正在将第二数据帧与参考的第一列进行比较,以找到最接近的匹配,然后从参考数据帧的第二列返回相应的项。我正在试图找到一种比我目前正在做的更快的方法,它是一个for循环,和底部的循环一样,可以工作,但是有没有更好的方法来避免迭代呢?

查找的值的预期结果

代码语言:javascript
运行
复制
a
1.1
2.1
2.9
3.1 
4.2
5.0 

的参考值

代码语言:javascript
运行
复制
A   B
1   10
2   20
3   30
4   40
5   50

将会是

代码语言:javascript
运行
复制
a   B
1.1 10
2.1 20
2.9 30
3.1 30
4.2 40
5.0 50

我的方法是

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd

def reference_df():
    A = [1, 2, 3, 4, 5]
    B = [10, 20, 30, 40, 50]
    df1 = pd.DataFrame(A, columns=['A'])
    df1['B'] = pd.Series(B, index=df1.index)
    return(df1)


def working_df():
    a = [1.1, 2.1, 2.9, 3.1, 4.2, 5.0]
    df1 = pd.DataFrame(a, columns=['a'])
    return(df1)


def Look_up():
    df1 = reference_df()
    df2 = working_df()
    A = df1['A']
    B = df1['B']
    a = df2['a']

    def Look_up_b(a):
        idx = (np.abs(A - a)).argmin()
        b = B[idx]
        return(b)

    b = []
    for i in a:
        b.append(Look_up_b(i))

    df3 = pd.DataFrame(a, columns=['a'])
    df3['b'] = pd.Series(b, index=df3.index)
    return(df3)

print(Look_up())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 23:06:03

这是merge_asof

代码语言:javascript
运行
复制
# convert reference values to float
references['A'] = references['A'].astype('float64')

pd.merge_asof(df, references, 
              left_on='a', right_on='A',
              direction='nearest'
             )

输出:

代码语言:javascript
运行
复制
     a    A   B
0  1.1  1.0  10
1  2.1  2.0  20
2  2.9  3.0  30
3  3.1  3.0  30
4  4.2  4.0  40
5  5.0  5.0  50
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61210787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档