У меня есть pandas dataframe с 3 столбцами, где:
- Категория dtype - строка
- Дата dtype - datetime
Значения dtype - float
df = pd.DataFrame()
df['category'] = ['a', 'b', 'b', 'b', 'c', 'a', 'b', 'c', 'c', 'a']
df['date'] = ['2018-01-01', '2018-01-01', '2018-01-03', '2018-01-05', '2018-01-01', '2018-01-02', '2018-01-06', '2018-01-03', '2018-01-04','2018-01-01']
df['values'] = [1, 2, -1.5, 2.3, 5, -0.7, -5.2, -5.2, 1, -1.1]
df
Представление кадра данных
Я хочу отфильтровать строки, которые имеют положительное значение и отрицательное значение (с наименьшей разницей). Закрытьна эту дату для каждой категории.
Итак, по сути, вывод выглядит так:
df = pd.DataFrame()
df['category'] = ['a', 'a','b', 'b', 'c', 'c']
df['date'] = ['2018-01-01', '2018-01-01', '2018-01-01', '2018-01-03', '2018-01-01', '2018-01-03']
df['values'] = [1, -1.1, 2, -1.5, 5, -5.2]
df
Отфильтрованный фрейм данных
Я смотрел похожие запросына SO ( Определение ближайшего значения в столбце для каждого фильтра с использованием Pandas , Как найти ближайшие значения в ряду панд к номеру ввода? )
Первый использует idxmin
, который возвращает первое вхождение, а не самое близкое по значению.
Вторая ссылка говорит о конкретном значении в качестве ввода - я не думаю, что чистый np.argsort
работает в моем случае.
Я могу представить себе использование сложной сети операторов ifчтобы сделать это, но я не уверен, что самый эффективный способ сделать это с пандами.
Любое руководство будет с благодарностью.