Reputation: 87
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
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