查找最接近输入值的行

时间:2018-10-01 08:45:22

标签: python pandas

我正在努力解决这个问题。我有一个看起来像这样的熊猫数组

               delta_n    column_1   ...
0                10      10        ...
1                20       0
2                30       0

现在我有一个数字,可以说我搜索delta_n=20.5,我想选择最接近delta_n数字的行。

我的输出应该是:

1                20       0

我使用df.loc[20.5]进行了尝试,但是由于它不在pd数据框中,因此无法正常工作。

谢谢, R

1 个答案:

答案 0 :(得分:2)

sub减去值,用abs得到绝对值,用idxmin找到最小值的索引,最后用loc选择:

idx = df['delta_n'].sub(delta_n).abs().idxmin()

#added double [[]] for one row DataFrame
df1 = df.loc[[idx]]
print (df1)
   delta_n  column_1
1       20         0

#output Series with one []
s = df.loc[idx]
print (s)
delta_n     20
column_1     0
Name: 1, dtype: int64

详细信息

print (df['delta_n'].sub(delta_n))
0   -10.5
1    -0.5
2     9.5
Name: delta_n, dtype: float64

print (df['delta_n'].sub(delta_n).abs())
0    10.5
1     0.5
2     9.5
Name: delta_n, dtype: float64

print (df['delta_n'].sub(delta_n).abs().idxmin())
1

通过numpy.argmin和通过iloc选择职位的另一种numpy解决方案:

pos = df['delta_n'].sub(delta_n).abs().values.argmin()
print (pos)
1

df1 = df.loc[[pos]]
print (df1)
   delta_n  column_1
1       20         0

s = df.loc[pos]
print (s)
delta_n     20
column_1     0
Name: 1, dtype: int64