Python 根据第二个系列的值和这些最接近匹配的位置(索引)查找系列的元素最接近匹配

Python 根据第二个系列的值和这些最接近匹配的位置(索引)查找系列的元素最接近匹配,python,pandas,series,Python,Pandas,Series,我有两个不同长度的熊猫系列 第一个和较短的一个有一组元素(浮点数)。对于每个元素,我希望找到与第二个或更大系列中的元素最接近的匹配(最小绝对差) 我还想知道第二个系列中最接近匹配元素的索引 我尝试使用reindex方法,但它引发了一个错误“ValueError:无法使用方法或限制对非唯一索引重新编制索引”,因为第二个系列具有设置为索引的非唯一值 这是我用来寻找序列B中元素与序列A中元素最匹配的代码 A=pd.系列([1.0,4.0,10.0,4.0,5.0,19.0,20.0]) B=pd.系列

我有两个不同长度的熊猫系列

第一个和较短的一个有一组元素(浮点数)。对于每个元素,我希望找到与第二个或更大系列中的元素最接近的匹配(最小绝对差)

我还想知道第二个系列中最接近匹配元素的索引

我尝试使用reindex方法,但它引发了一个错误“ValueError:无法使用方法或限制对非唯一索引重新编制索引”,因为第二个系列具有设置为索引的非唯一值

这是我用来寻找序列B中元素与序列A中元素最匹配的代码

A=pd.系列([1.0,4.0,10.0,4.0,5.0,19.0,20.0])
B=pd.系列([0.8,5.1,10.1,0.3,5.5])
pd.Series(A.values,A.values).reindex(B.values,method='nearest')
ValueError:无法使用方法或限制重新索引非唯一索引
最后,我希望有一个如下所示的数据帧

B系列中最接近的匹配A系列中最接近匹配的索引
0.8  1.0                        0
5.1  5.0                        4
10.1 10.0                       2
0.3  1.0                        0
5.5  5.0                        4

所以这里有一种使用
numpy
广播的方法

A.iloc[np.abs(B.values-A.values[:,None]).argmin(axis=0)]

0     1.0
4     5.0
2    10.0
0     1.0
4     5.0
dtype: float64
下面是添加
删除重复项的修复

pd.Series(A.values, A.values).sort_index().drop_duplicates().reindex(B.values, method='nearest')
0.8      1.0
5.1      5.0
10.1    10.0
0.3      1.0
5.5      5.0
dtype: float64