Как сделать групповой выбор максимальной строки в кадре данных pandas для категориальных значений - PullRequest
2 голосов
/ 13 января 2020

У меня есть датафрейм, как показано ниже:

df.head(25)

    ORDER_ID    MILESTONE
    19837715    00
    19837715    00
    19837715    M0
    19837715    M2
    19837715    M1
    19841303    00
    19841303    M0
    19841303    00
    19841303    M0
    19841303    M2
    19841303    M1
    19841303    M3
    19841333    M3
    19841333    M4
    19841333    M4
    19841333    M7
    19841333    M5
    19841333    M6
    19841333    M2

Я пытаюсь переписать приведенный ниже запрос в pandas

select
        order_id
        , max(milestone) as current_milestone

    from
        df
    group by
        order_id

Уровень категориального столбца hirerachy. идет от 0, M0, M1, M2, M3, M4, M5, M6, M7, где M7 является самым высоким.

Как это можно сделать в pandas?

1 Ответ

3 голосов
/ 13 января 2020

IIU C, попробуем:

df['MILESTONE'] = pd.Categorical(df['MILESTONE'], 
               categories=sorted(df['MILESTONE'].unique(), key=lambda x: x[-1]),
               ordered=True)
df.sort_values('MILESTONE', ascending=False).groupby('ORDER_ID').head(1)

Вывод:

    ORDER_ID MILESTONE
15  19841333        M7
11  19841303        M3
3   19837715        M2
...