Как заменить дубликаты на нулевые значения в определенных столбцах?

#python #pandas

Вопрос:

У меня есть набор данных с 50 столбцами. Я хочу удалить повторяющиеся значения с 4-го по 50-й столбцы, сохранив строки. Например, повторяющиеся значения из 4-го столбца следует изменить на значения NaN, затем на 5-й и т. Д.

Не могли бы вы, пожалуйста, помочь мне?

Ответ №1:

Использовать Series.duplicated со Series.mask столбцами, выбранными в DataFrame.iloc функции лямбда в DataFrame.apply :

 np.random.seed(2020)
df = pd.DataFrame(np.random.randint(3, size=(5, 60)))
#print (df)

f = lambda x: x.mask(x.duplicated())
df.iloc[:, 4:51] = df.iloc[:, 4:51].apply(f)
 

 print (df)
   0   1   2   3    4    5    6    7    8    9    10   11   12   13   14   15  
0   0   0   2   1  0.0  1.0  0.0  0.0  0.0  2.0  1.0  2.0  2.0  2.0  1.0  0.0   
1   2   0   0   2  NaN  2.0  2.0  2.0  NaN  NaN  2.0  1.0  0.0  1.0  NaN  1.0   
2   1   2   2   1  1.0  0.0  NaN  NaN  1.0  NaN  NaN  0.0  1.0  NaN  NaN  NaN   
3   2   0   1   1  2.0  NaN  1.0  NaN  2.0  NaN  NaN  NaN  NaN  0.0  NaN  NaN   
4   2   0   1   0  NaN  NaN  NaN  1.0  NaN  1.0  NaN  NaN  NaN  NaN  NaN  NaN   

    16   17   18   19   20   21   22   23   24   25   26   27   28   29   30  
0  0.0  0.0  0.0  2.0  0.0  1.0  1.0  1.0  2.0  1.0  2.0  1.0  1.0  2.0  2.0   
1  1.0  1.0  1.0  0.0  1.0  2.0  NaN  0.0  NaN  NaN  NaN  NaN  0.0  0.0  0.0   
2  NaN  NaN  NaN  NaN  NaN  NaN  0.0  NaN  1.0  NaN  0.0  NaN  2.0  1.0  NaN   
3  NaN  NaN  2.0  1.0  NaN  NaN  NaN  NaN  NaN  2.0  NaN  0.0  NaN  NaN  NaN   
4  NaN  NaN  NaN  NaN  NaN  0.0  NaN  NaN  0.0  0.0  NaN  2.0  NaN  NaN  1.0   

    31   32   33   34   35   36   37   38   39   40   41   42   43   44   45  
0  2.0  2.0  1.0  0.0  2.0  2.0  0.0  2.0  0.0  1.0  0.0  1.0  2.0  2.0  0.0   
1  0.0  NaN  0.0  1.0  NaN  0.0  2.0  1.0  2.0  NaN  1.0  NaN  NaN  NaN  2.0   
2  NaN  0.0  NaN  2.0  0.0  NaN  1.0  NaN  NaN  2.0  NaN  NaN  NaN  0.0  NaN   
3  1.0  1.0  NaN  NaN  1.0  NaN  NaN  NaN  NaN  NaN  2.0  2.0  1.0  1.0  NaN   
4  NaN  NaN  2.0  NaN  NaN  NaN  NaN  NaN  NaN  0.0  NaN  NaN  NaN  NaN  1.0   

    46   47   48   49   50  51  52  53  54  55  56  57  58  59  
0  1.0  1.0  2.0  2.0  1.0   0   2   0   2   2   0   2   1   2  
1  0.0  0.0  1.0  0.0  2.0   1   0   2   1   1   1   2   2   1  
2  2.0  NaN  NaN  1.0  NaN   2   0   1   2   1   2   2   1   1  
3  NaN  2.0  NaN  NaN  NaN   2   2   2   1   1   2   2   2   1  
4  NaN  NaN  NaN  NaN  NaN   1   1   1   0   1   2   2   1   0  
 

Комментарии:

1. Спасибо! Это помогло