Python 如何获取与Dataframe中的另一个值最接近的值
假设我有以下数据帧:Python 如何获取与Dataframe中的另一个值最接近的值,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有以下数据帧: col1 col2 0 blue 0.400 1 test 0.255 2 yellow 0.460 如何从col2中获取最接近col1='test'对应值的单个值?为了让事情更清楚,我想找到最接近0.255的值,在本例中是0.400,然后是col1中具有最接近值的对应值,即在本例中为蓝色 使用: m = df['col1'].eq('test') df.lo
col1 col2
0 blue 0.400
1 test 0.255
2 yellow 0.460
如何从col2中获取最接近col1='test'对应值的单个值?为了让事情更清楚,我想找到最接近0.255的值,在本例中是0.400,然后是col1中具有最接近值的对应值,即在本例中为蓝色 使用:
m = df['col1'].eq('test')
df.loc[df['col2'].sub(df['col2'].where(m)
.bfill()
.ffill())
.abs()
.mask(m).idxmin(),'col2']
或
输出
参考资料
使用:
或
输出
参考资料
输出:
Out[38]: 0.4
输出:
Out[38]: 0.4
idxmin
和min和dict的情况一样
idxmin
和min和dict的情况一样
我认为你的答案不准确,如果最接近的值等于“test”中的值,而差异为0,我认为你的答案不准确,如果最接近的值等于“test”中的值,而差异为0,那么很好,我正准备使用numpy和argmin发布相同的解决方案,但这更干净。非常感谢你的回复。它工作得很好-我已经更新了我的问题,尽管我错误地描述了所需的输出。所以在找到最接近的值之后,我对col1的值感兴趣,它有最接近的col2值。在本例中,所需的输出将是bluenice,我正要发布使用numpy和argmin的相同解决方案,但这更干净。非常感谢您的回复。它工作得很好-我已经更新了我的问题,尽管我错误地描述了所需的输出。所以在找到最接近的值之后,我对col1的值感兴趣,它有最接近的col2值。在这种情况下,所需的输出将为蓝色
df.loc[(df['col2']-df[df['col1']=='test']['col2'].values).abs().sort_values().index[1]]['col2']
Out[38]: 0.4
def s(d, t): return d.sub(d.pop(t)).abs().idxmin()
df.set_index('col1').col2.pipe(s, t='test')
'blue'
d = dict(zip(df.col1, df.col2))
v = d.pop('test')
min(d, key=lambda x: abs(d[x] - v))
'blue'