#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()]]