Как удалить повторяющиеся строки из DataFrame, где дубликаты имеют NaN? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть dataFrame с более чем 200 объектами, и я поместил часть набора данных, чтобы показать проблему:

   index  ID   X1   X2       Date1      Y1     
      0   2   324  634  2016-01-01     NaN    
      1   2   324  634  2016-01-01   1224.0    
      3   4   543  843  2017-02-01     654    
      4   4   543  843  2017-02-01     NaN    
      5   5   523  843  2015-09-01     NaN    
      6   5   523  843  2015-09-01    1121.0
      7   6   500  897  2015-11-01     NaN  

Как видите, строки дублируются (в ID, X1, X2и Date1), и я хочу удалить одну из строк, которые похожи по ID, X1, X2, Date1 и Y1, который содержит NaN.Итак, мой желаемый DataFrame должен быть:

   index  ID   X1   X2       Date1      Y1     

      1   2   324  634  2016-01-01   1224.0    
      3   4   543  843  2017-02-01     654    
      6   5   523  843  2015-09-01    1121.0
      7   6   500  897  2015-11-01     NaN 

Кто-нибудь знает, как я могу справиться с этим?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Используйте sort_values на "Y1", чтобы переместить NaN в нижнюю часть кадра данных, а затем используйте drop_duplicates:

df2 = (df.sort_values('Y1', na_position='last')
         .drop_duplicates(['ID', 'X1', 'X2', 'Date1'], keep='first')
         .sort_index())

df2
       ID   X1   X2       Date1      Y1
index                                  
1       2  324  634  2016-01-01  1224.0
3       4  543  843  2017-02-01   654.0
6       5  523  843  2015-09-01  1121.0
7       6  500  897  2015-11-01     NaN
0 голосов
/ 27 декабря 2018

просто используйте drop_duplicates функцию https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html

df \
.orderBy(Y1).desc()) \
.drop_duplicates(subset='ID')
...