Python: получение строки, значение которой ближе всего к 5, в группах с использованием groupby

#python #pandas #pandas-groupby

#python #pandas #pandas-groupby

Вопрос:

Я пытаюсь получить строку с ближайшим значением к 5 на основе другого столбца groupby.

Предположим, что столбец groupby называется ‘ticker’, столбец ‘apply’ называется ‘YTC’. Существует несколько идентичных значений ticker.

Аналогичное решение показано ниже для макс. Однако я хочу найти ближайшее число к 5, а не максимальное.

 df1.groupby("Ticker")["YTC"].max())
  

В идеале код должен выводить фрейм данных для значения ‘Ticker’, ближайшего к 5.

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

1. Создайте новый столбец, из которого вычитается 5, power (-1) и используется .max()

Ответ №1:

Можно сделать это без groupby сортировки drop_duplicates .

 import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame({'Ticker': list('aabbccddeeeeefff'),
                   'YTC': np.random.randint(1,10,16)})

df[['Ticker', 'YTC']].assign(delta=(df.YTC-5).abs()).sort_values('delta').drop_duplicates('Ticker').drop(columns='delta')
#   Ticker  YTC
#12      e    5
#15      f    5
#4       c    4
#0       a    3
#2       b    7
#6       d    2
  

Индекс является исходным индексом DataFrame для строки, в которой встречается ближайшее значение, что может быть полезно.

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

1. Большое спасибо. Это было идеальное решение