nikita1221
nikita1221

Reputation: 87

How to replace duplicates to null values in specific columns?

I have dataset with 50 columns. I want to remove duplicate values from 4th to 50th columns keeping the rows. E.g. duplicate values from column 4th should be changed to NaN values, then 5th etc.

Can you please help me?

Upvotes: 1

Views: 458

Answers (1)

jezrael
jezrael

Reputation: 862851

Use Series.duplicated with Series.mask per columns selected in DataFrame.iloc by lambda function in 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  

Upvotes: 2

Related Questions