You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:42:45