Python 使用pandas从另一列和多个输入之间最接近的匹配中查找一列的值
我有两个数据框一个是引用我将第二个数据框与引用的第一列进行比较,以找到最接近的匹配项,然后从引用数据框的第二列返回相应的项。我正试图找到一种比我目前正在做的更快的方法,它是一个for循环,与底部的一个相同,但有没有更好的方法来避免迭代 查找的值的预期结果Python 使用pandas从另一列和多个输入之间最接近的匹配中查找一列的值,python,pandas,Python,Pandas,我有两个数据框一个是引用我将第二个数据框与引用的第一列进行比较,以找到最接近的匹配项,然后从引用数据框的第二列返回相应的项。我正试图找到一种比我目前正在做的更快的方法,它是一个for循环,与底部的一个相同,但有没有更好的方法来避免迭代 查找的值的预期结果 a 1.1 2.1 2.9 3.1 4.2 5.0 对照的参考值 A B 1 10 2 20 3 30 4 40 5 50 会是 a B 1.1 10 2.1 20 2.9 30 3.1 30 4.2 40
a
1.1
2.1
2.9
3.1
4.2
5.0
对照的参考值
A B
1 10
2 20
3 30
4 40
5 50
会是
a B
1.1 10
2.1 20
2.9 30
3.1 30
4.2 40
5.0 50
我的方法是
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())
这是
merge\u asof
:
# convert reference values to float
references['A'] = references['A'].astype('float64')
pd.merge_asof(df, references,
left_on='a', right_on='A',
direction='nearest'
)
输出:
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
为什么在这里使用嵌套函数?另外,变量名和函数名通常应遵循带有下划线的
小写形式。这是否回答了您的问题?