Python Pandas groupby и максимальное значение категориального столбца - PullRequest
0 голосов
/ 10 июня 2018

У меня есть кадр данных Pandas, который выглядит следующим образом:

ID  Cat
1   SF
1   W
1   F
2   R64
2   SF
2   F

Первый столбец является идентификатором, а второй столбец содержит категориальные данные, порядок которых следующий: R64 < SF < F < W

Мне нужен новый фрейм данных, который содержит для каждого идентификатора максимальное категориальное значение.Результирующий кадр данных должен выглядеть следующим образом:

ID  Cat
1   W
2   F

Я пробовал решение из этого потока , но оно не работает для категориальных данных: df.groupby("ID", as_index=False).Cat.max()

Результат с таким подходом выглядит следующим образом:

ID  number
1   SF
2   SF

Я объявляю категориальный столбец следующим образом:

df['Cat'] = pd.Categorical(df['Cat'], categories = ["R64", "SF", "F", "W"], ordered = True)

1 Ответ

0 голосов
/ 10 июня 2018

Это возможно с расширением.Определите порядок в вашем столбце:

df.Cat = pd.Categorical(
    df.Cat, categories=['R64', 'SF', 'F', 'W'], ordered=True)

Сейчас groupby работает:

df.groupby('ID').Cat.max().reset_index()

   ID Cat
0   1   W
1   2   F

В качестве альтернативы используйте sort_values, groupby и head.

df.sort_values(['ID', 'Cat'], ascending=[True, False]).groupby('ID').head(1)

   ID Cat
1   1   W
5   2   F
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...