Панды — Найдите первое появление числа, ближайшего к входному значению

#python #pandas #dataframe

#питон #панды #фрейм данных

Вопрос:

У меня есть фрейм данных, как показано ниже.

 time speed 0 1 0.20 1 2 0.40 2 3 2.00 3 4 3.00 4 5 0.40 5 6 0.43 6 7 6.00  

Я хотел бы найти первое появление числа ( в столбце «Скорость»), которое ближе всего к входному значению, которое я ввожу.

Например :

входное значение = 0,43

Ожидаемый Результат :

Скорость : 0,40 и соответствующее время : 2

Столбец скорости не следует сортировать по этой проблеме.

Я попробовал ниже,но не получил ожидаемого результата.

введите описание изображения здесь

Любая помощь в этом будет признательна.

Комментарии:

1. Согласно вашей логике, я думаю, что в вашем выводе нет ничего плохого, так 0.43 как он ближе всего к 0.43 !

2. Да,но он должен рассматривать 0,40 как самое близкое, как его первое встречающееся значение.

3. Тогда вам нужно определить пороговое значение, иначе почему бы 0,2 не быть самым близким?

Ответ №1:

абсолютная близость

Вы можете вычислить абсолютную разницу по вашей ссылке и получить idxmin :

 speed_input = 0.43 df.loc[abs(df['speed']-speed_input).idxmin()]  

выход:

 time 6.00 speed 0.43 Name: 5, dtype: float64  

первый ближайший с порогом:

 i = 0.43 thresh = 0.03 df.loc[abs(df['speed']-i).le(thresh).idxmax()]  

выход:

 time 2.0 speed 0.4 Name: 1, dtype: float64  

Комментарии:

1. его Ожидаемый Результат : Speed : 0.40 amp; corresponding Time : 2

2. @Thekingis007 обновлено

3. точно! сначала он должен определить пороговое значение, спасибо за обновление

4. @jezrael Series.abs не быстрее, чем abs(series) и печатать короче, так что мне нравится этот способ 😉

5. @JayashreeSridhar ну, вам нужно как-то определить метод, иначе как вы можете сказать, что 0.4 близко, но не 0.35 или 0.2? Даже если вы используете округление, это действует как пороговое значение

Ответ №2:

Одна идея заключается в том, чтобы округлить оба значения:

 df[[(df['speed'].round(1)-round(speed_input, 1)).abs().idxmin()]]