如何从重复的具有NaN的DataFrame中删除重复的行?

时间:2018-12-27 16:14:47

标签: python pandas dataframe duplicates

我有一个具有200多个功能的dataFrame,并且我放入了一部分数据集来显示问题:

   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 :(得分:1)

只需使用drop_duplicates函数https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html

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

答案 1 :(得分:1)

在“ Y1”上使用sort_values将NaN移至DataFrame的底部,然后使用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