Найти строку ближе всего к входу - PullRequest
0 голосов
/ 01 октября 2018

Я борюсь с этой проблемой.У меня есть массив панд, который выглядит следующим образом

               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 голосов
/ 01 октября 2018

Вычтите значение на 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:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...