Как отфильтровывать дубликаты на основе различных фильтров

#python #python-3.x #pandas #dataframe

#python #python-3.x #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных со столбцами букв, цифр и цифр

 df = pd.DataFrame({'Letters':['AB', 'XY', 'ZW','ZW','XY' ],
               'Numbers': [1234, 4, 333, 333, 4],
               'Digits': [32234, 32534, 4234, 4235, NaN]})

print(df)
  Letters  Numbers    Digits
0      AB     1234    32234   
1      XY        4    32534   
2      ZW      333    4234   
3      ZW      333    4235  
4      XY        4    NaN    
  

Я хотел бы отфильтровать дубликаты на основе определенных столбцов (здесь буквы и цифры) и удалить строки, в которых столбец имеет определенное значение (в данном случае, где «Цифры» являются наибольшими или Nan)

Таким образом, результат будет

 print(df)
  Letters  Numbers    Digits
0      AB     1234    32234   
1      XY        4    32534      
3      ZW      333    4235
  

Ответ №1:

Мы можем использовать sort_values na_position аргумент with , а затем вызвать drop_duplicates :

 (df.sort_values('Digits', na_position='first')
   .drop_duplicates(['Letters', 'Numbers'], keep='last')
   .sort_index())

  Letters  Numbers   Digits
0      AB     1234  32234.0
1      XY        4  32534.0
3      ZW      333   4235.0