#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных df = pd.DataFrame({'col1': ["a","b","c","d","e", "f","g","h"], 'col2': [1,1,1,2,2,3,3,3]})
, который выглядит как
Ввод:
col1 col2
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 3
6 g 3
7 h 3
Я хочу отбросить последние базы строк из группировки «col2», которая будет выглядеть следующим образом…
Ожидаемый результат:
col1 col2
0 a 1
1 b 1
3 d 2
5 f 3
6 g 3
Я написал, df.groupby('col2').tail(1)
что дает мне то, что я хочу удалить, но когда я пытаюсь написать df.drop(df.groupby('col2').tail(1))
, я получаю ошибку axis. Каким было бы решение этой проблемы
Ответ №1:
Похоже, duplicated
сработает:
df[df.duplicated('col2', keep='last') |
(~df.duplicated('col2', keep=False)) # this is to keep all single-row groups
]
Или с вашим подходом вам следует удалить индекс:
# this would also drop all single-row groups
df.drop(df.groupby('col2').tail(1).index)
Вывод:
col1 col2
0 a 1
1 b 1
3 d 2
5 f 3
6 g 3
Ответ №2:
попробуйте это:
df.groupby('col2', as_index=False).apply(lambda x: x.iloc[:-1,:]).reset_index(drop=True)