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

如何去除DataFrame单行内的重复值?

解决DataFrame行内重复值去重问题

我完全懂你的需求——你要移除每行内部的重复值,只保留唯一值,而df.drop_duplicates()是用来处理整行重复的(也就是跨行的重复行),确实和你的场景不匹配。下面给你几个简单高效的实现方法:

1. 先构造示例数据

先还原你的测试数据,方便验证效果:

import pandas as pd

data = {
    'Column 1': ['A', 'D', 'E', 'F'],
    'Column 2': ['B', 'C', 'E', 'G'],
    'Column 3': ['A', 'C', 'E', 'H']
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

输出和你的示例一致:

Column 1 Column 2 Column 3
0        A        B        A
1        D        C        C
2        E        E        E
3        F        G        H

2. 核心去重方法

方法一:用apply + unique()

对每行执行去重操作,自动用NaN填充空缺位置,最后还原原列名:

# 按行处理,提取唯一值并转为Series
df_cleaned = df.apply(lambda row: pd.Series(row.unique()), axis=1)
# 对齐原列名
df_cleaned.columns = df.columns

# 如果需要把NaN替换为空字符串(和你的示例格式完全匹配)
df_cleaned = df_cleaned.fillna('')

print("\n处理后的数据:")
print(df_cleaned)

输出就是你想要的结果:

Column 1 Column 2 Column 3
0        A        B         
1        D        C         
2        E                  
3        F        G        H

方法二:用apply + dict.fromkeys()

如果你需要严格保证值的出现顺序(unique()在大部分场景下也会保留顺序,但dict.fromkeys()是更稳妥的方式),可以利用字典键的唯一性来去重:

df_cleaned = df.apply(lambda row: pd.Series(list(dict.fromkeys(row))), axis=1)
df_cleaned.columns = df.columns
df_cleaned = df_cleaned.fillna('')

这个方法的效果和方法一完全一致,只是去重的底层逻辑不同,适合对顺序有严格要求的场景。

简单原理说明

  • axis=1参数指定按行处理,而不是默认的按列
  • row.unique()/dict.fromkeys(row)会提取该行的唯一值,保留首次出现的顺序
  • 转成pd.Series后,长度不足的位置会自动填充NaN,最后通过fillna('')转为空字符串,完美匹配你的示例格式

内容的提问来源于stack exchange,提问作者user3468356

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:36