我有一个系列A,例如1.3, 4.5, 10.11
和系列B 0.8, 5.1, 10.1, 0.3
,我想为B中的每个元素获得一个C与C中最接近的数字:1.3, 4.5, 10.11, 1.3
顺便说一句,如果它简化了事情,A中的closest
号码可能是最接近的号码大于,而答案也可能是1.3, 10.11, 10.11, 1.3
相关 How do I find the closest values in a Pandas series to an input number?
答案 0 :(得分:4)
设置
A = pd.Series([1.3, 4.5, 10.11])
B = pd.Series([0.8, 5.1, 10.1, 0.3])
选项1
使用pd.Series.searchsorted
这会针对A
的每个元素搜索B
,并查找A
中应该插入B
元素的位置。
A.iloc[A.searchsorted(B)]
0 1.30
2 10.11
2 10.11
0 1.30
dtype: float64
选项2
但是为了得到最近的,你可以破解pd.Series.reindex
方法。
pd.Series(A.values, A.values).reindex(B.values, method='nearest')
0.8 1.30
5.1 4.50
10.1 10.11
0.3 1.30
dtype: float64
答案 1 :(得分:0)
我尝试使用reindex方法,但是在A系列中使用非唯一值会引发错误。
A = pd.Series([1.0, 4.0, 10.0, 4.0, 5.0, 19.0, 20.0])
B = pd.Series([0.8, 5.1, 10.1, 0.3, 5.5])
pd.Series(A.values, A.values).reindex(B.values, method='nearest')
ValueError: cannot reindex a non-unique index with a method or limit
这是我认为可能对其他人有用的解决方法。
A = pd.Series([1.0, 4.0, 10.0, 4.0, 5.0, 19.0, 20.0])
B = pd.Series([0.8, 5.1, 10.1, 0.3, 5.5])
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