如何在Pandas DataFrame中跨列去重且不删除整行?
解决方法
直接对DataFrame的每一列,将重复出现的值(仅保留首次出现的)替换为NaN即可,用Pandas的duplicated()和where()方法实现:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'A': ['foo', 'foo', 'yes', 'bar'], 'B': ['g', 'g', 'y', 'y'], 'C': ['A', 'G', 'B', 'B'] }) # 对每一列处理重复值,保留首次出现,其余替换为NaN df = df.apply(lambda col: col.where(~col.duplicated())) print(df)
运行后输出结果:
A B C 0 foo g A 1 NaN NaN G 2 yes y B 3 bar NaN NaN
如果你的需求是基于多列组合的重复(比如仅当A+B的组合重复时,才将A和B设为NaN),那可以先标记组合重复的行,再对指定列进行替换:
# 标记A+B组合重复的行 duplicate_mask = df[['A', 'B']].duplicated() # 将重复行的A、B列设为NaN df.loc[duplicate_mask, ['A', 'B']] = pd.NA print(df)
这段代码会得到:
A B C 0 foo g A 1 NaN NaN G 2 yes y B 3 bar y B
从你给出的示例来看,第一种逐列独立去重的方法完全匹配你的需求。
内容的提问来源于stack exchange,提问作者btroppo
相关产品推荐
相关产品推荐

