Как найти минимальное значение сгруппированных данных в столбце A и минимальное значение для другого столбца B, если в A существуют повторяющиеся значения - PullRequest
2 голосов
/ 09 июня 2019

Я пытаюсь проанализировать фрейм данных с помощью Pandas.Мой вопрос похож на вопрос:

Как получить строки с минимальными значениями в одном столбце, сгруппированные по другому столбцу, сохраняя при этом другие столбцы?

В дополнение кэтот вопрос (который очень важен в моем случае), мне также нужно найти минимальное значение других столбцов, если есть несколько минимальных значений для сгруппированного столбца.Если нет, мне нужно увидеть соответствующие значения.

Вот базовый пример:

df = pd.DataFrame({'id' : [1,1,1,2,2],
                   'A' : [8,6,6,8,9],
                   'B' : [1,2,4,5,4]})

Когда этот кадр данных группируется по 'id' и агрегируется (сначала на 'A',затем на «B»), как я хочу, вот вывод, который я хочу увидеть:

id  A   B   
1   6   2
2   8   5

Обратите внимание, что есть несколько строк, имеющих минимальное значение для столбца «A», когда идентификатор равен 1.соответствующие значения столбца «B» равны 2 и 4. Таким образом, минимум из них возвращается как результат для столбца «B».

Я не знаю R, поэтому не понял ответа по ссылке выше.Во всяком случае, это другая версия.

Ответы [ 2 ]

3 голосов
/ 09 июня 2019

IIUC, используя idxmin после сортировки по B


df.loc[df.sort_values('B').groupby('id')['A'].idxmin()]

   id  A  B
1   1  6  2
3   2  8  5
1 голос
/ 09 июня 2019

Другим способом является использование groupby сортировок group_keys по умолчанию. Таким образом, groupby 'id, A' будет выдвигать группы min A за ID наверх. После этого позвоните min на B, reset_index и drop_duplicate

df.groupby(['id', 'A'])['B'].min().reset_index().drop_duplicates(subset='id')


Out[298]:
   id  A  B
0   1  6  2
2   2  8  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...