Как сохранить последние записи в фрейме данных в соответствии с последней версией, используя pandas

У меня есть такой фрейм данных

Id     b_num    b_type     b_ver   price
100    55        A          0       100
101    55        A          0        50    
102    55        A          1       100
103    55        A          1        60 
104    30        C          2       100
105    30        C          2        50    
106    30        C          2       100
107    30        C          2        60
108    30        C          4       200
109    30        C          4        55    
110    30        C          4        80
111    30        C          4       120
112    30        C          4        20

Я хотел бы сохранить последнюю версию b_num и b_type, b_ver — это номер версии

Ожидаемый результат:

Id     b_num    b_type     b_ver   price
102    55        A          1       100
103    55        A          1        60 
108    30        C          4       200
109    30        C          4        55    
110    30        C          4        80
111    30        C          4       120
112    30        C          4        20

Спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Подумайте о том, чтобы попробовать:

df.merge(df.groupby(['b_num','b_type'],as_index=False)['b_ver'].last(),
         on=['b_num','b_type','b_ver'])

Вывод:

    Id  b_num b_type  b_ver  price
0  102     55      A      1    100
1  103     55      A      1     60
2  108     30      C      4    200
3  109     30      C      4     55
4  110     30      C      4     80
5  111     30      C      4    120
6  112     30      C      4     20

Использование groupby.rank()

df.loc[df.groupby(['b_num','b_type'])['b_ver'].rank(ascending=False,method = 'dense').eq(1)]

используя groupby.nlargest()

df.loc[df.groupby(['b_num','b_type'])['b_ver'].nlargest(1,keep = 'all').droplevel([0,1]).index]

используя groupby.transform()

df.loc[df.groupby(['b_num','b_type'])['b_ver'].transform('max').eq(df['b_ver'])]

Выход:

     Id  b_num b_type  b_ver  price
2   102     55      A      1    100
3   103     55      A      1     60
8   108     30      C      4    200
9   109     30      C      4     55
10  110     30      C      4     80
11  111     30      C      4    120
12  112     30      C      4     20

Другие вопросы по теме