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'