我要根据以下条件用NaN替换重复项:
ID和代码重复。如果代码不同,请保留。
例如:
ID Code
1 A10
1 A10
1 A10
1 E39
1 I24
2 O32
2 K94
3 E39
我尝试过:
df.loc[df['ID'].duplicated(), 'Code'] = np.nan
但是它只保留第一个代码并替换任何其他代码。我希望只有在ID和代码与其他实例匹配的情况下才能替换代码。
所需的输出:
ID Code
1 A10
1 NaN
1 NaN
1 E39
1 I24
2 O32
2 K94
3 E39
答案 0 :(得分:1)
通过同时指定两列来使用DataFrame.duplicated
:
df.loc[df.duplicated(['ID','Code']), 'Code'] = np.nan
#alternatives
#df['Code'] = df['Code'].mask(df.duplicated(['ID','Code']))
#df['Code'] = np.where(df.duplicated(['ID','Code']), np.nan, df['Code'])
print (df)
ID Code
0 1 A10
1 1 NaN
2 1 NaN
3 1 E39
4 1 I24
5 2 O32
6 2 K94
7 3 E830