python - 用两个条件替换重复项

标签 python pandas dataframe

我想根据以下条件用 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

最佳答案

使用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

关于python - 用两个条件替换重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55899584/

相关文章:

python - 以对数刻度绘制 x 和 y 轴

python - 基于多索引列数据框中的一系列列进行切片

Pandas:如何在不使用for循环的情况下将日期列中每个条目的日期增加一定天数

python - 宽数据的摘要统计

python - numpy einsum() 可以执行外加法吗?

python - Ruby/Python - 生成和解析 C/C++ 代码

python - 使用 django 的 page_cache 装饰器时如何清除整个缓存

javascript - 使用正则表达式匹配 JSON

Python pandas 方法链接 : assign column from strsplit

python - 随机日期和月份,但保留年份和时间间隔