панды отбрасывают последний элемент группы

#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)