查找最接近给定值和 return 行索引的值

Find values which are closest to given values and return the row index

有没有一种简单的方法可以以 numpy 的方式找到最接近的值? 并获取行号作为输出?

例如:我想找到最接近

的行
value= [0.33, 0.66, 0.99]

我有资料

random= pd.DataFrame()
random=random.assign(data='')
random.data= np.linspace(0.1,1.0,10)

data
0     0.1
1     0.2
2     0.3
3     0.4
4     0.5
5     0.6
6     0.7
7     0.8
8     0.9
9     1.0

作为答案,该函数现在应该给出 data 最接近 value

的行
answer= [2,6,9]

我正在尝试使用

idx = (np.abs(random.data - value)).argmin()

但我正在努力解决循环和行问题。

谁知道简单的方法? :-)

试试:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

value = 0.15

random= pd.DataFrame()
random=random.assign(data='')
random.data= np.linspace(0.1,1.0,10)

answer = []
temp = []
for d in random.data:
    temp.append(np.abs(d - value))

for i in range(0, len(temp)):
    try:
        answer.append(temp.index(min(temp), i, i+1))
    except ValueError as e:
        print(e)

print(answer)

在一个函数中,它将是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

def get_min(data, value):
    answer = []
    temp = []
    for d in data:
        temp.append(np.abs(d - value))
    for i in range(0, len(temp)):
        try:
            answer.append(temp.index(min(temp), i, i+1))
        except ValueError as e:
            print(e)
    return answer

random= pd.DataFrame()
random=random.assign(data='')
random.data= np.linspace(0.1,1.0,10)

print(get_min(random.data, 0.15))

问候

df = pd.DataFrame({'data':np.linspace(0.1, 1.0, 10)})

values = [0.33, 0.66, 0.99]

d = np.abs(values - df.values)

np.argmin(d, axis=0)

这 return 是 第一个 最接近值的索引。如果您在数据框中有多个值与 values 中的值同样接近并且想要 return 所有索引,您可以使用:

np.where(d == d.min(0))[0]

而不是 np.argmin