У меня есть фрейм данных с категориями и значениями. Мне нужно найти значение в каждой категории, наиболее близкое к значению. Я думаю, что я близок, но я не могу получить правильный результат при применении результатов argsort к исходному фрейму данных.
Например, если ввод был определен в приведенном ниже коде, вывод должен иметь только (a, 1, True)
, (b, 2, True)
, (c, 2, True)
, а все остальные isClosest Values
должны иметь значение False.
Если несколько ближайших значений, то это должно быть первое из перечисленных значений.
Вот код, который у меня есть, но я не могу заставить его правильно примениться к фрейму данных. Я хотел бы несколько указателей.
df = pd.DataFrame()
df['category'] = ['a', 'b', 'b', 'b', 'c', 'a', 'b', 'c', 'c', 'a']
df['values'] = [1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
df['isClosest'] = False
uniqueCategories = df['category'].unique()
for c in uniqueCategories:
filteredCategories = df[df['category']==c]
sortargs = (filteredCategories['value']-2.0).abs().argsort()
#how to use sortargs so that we set column in df isClosest=True if its the closest value in each category to 2.0?