用另一个系列中最接近的值替换一个pandas系列

时间:2018-01-03 09:03:03

标签: python pandas

我有一个系列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?

2 个答案:

答案 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