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

Pandas DataFrame移除重复列出错:保留首列却误删相关列求助

解决Pandas删除重复列(保留首个)的问题

你的问题核心是获取重复列索引的方式错误,导致误删了原本要保留的首列。

先明确你的场景:DataFrame中列0、2、4的内容完全重复(都是[1,2,3,4,5]),你需要保留列0、删除列2和4,但执行drop后这三列全被删掉,说明你的duplicate_cols实际包含了列0的索引,而非仅[2,4]。

错误原因

你大概率在识别重复列时,使用了会标记所有重复列(包括首个出现的)的逻辑,比如用了df.T.duplicated(keep=False)——这个参数会把所有内容重复的列都标记为True,导致duplicate_cols变成[0,2,4],执行drop时自然会删掉所有这三列。

正确操作步骤

要实现“保留首个重复列,删除后续重复列”,正确流程如下:

  1. 识别需要删除的重复列:
    将DataFrame转置(行变列),用duplicated(keep='first')标记后续重复的行(即原DataFrame的列)。这个参数会保留第一个出现的列,只把后面的重复列标记为True。

    # 转置后检查重复行,得到需要删除的列的布尔标记
    duplicate_mask = df.T.duplicated(keep='first')
    # 获取需要删除的列的索引
    duplicate_cols = df.columns[duplicate_mask]
    

    对你的DataFrame来说,duplicate_mask会是[False, False, True, False, True, False],对应的duplicate_cols就是[2,4],和你预期一致。

  2. 执行删除操作:
    用你原来的drop代码即可:

    df_cleaned = df.drop(duplicate_cols, axis=1)
    

    这样只会删除列2和4,保留列0、1、3、5,得到你想要的结果。

完整示例代码

假设你的原始DataFrame是这样创建的:

import pandas as pd

data = [
    [1, 2.3, 1, 2.5, 1, 4.5],
    [2, 2.3, 2, 2.5, 2, 4.5],
    [3, 2.3, 3, 2.5, 3, 4.5],
    [4, 2.3, 4, 2.5, 4, 4.5],
    [5, 2.3, 5, 2.5, 5, 4.5]
]
df = pd.DataFrame(data)

执行正确操作后,df_cleaned的输出就是你预期的结果:

0    1    3    5
0  1  2.3  2.5  4.5
1  2  2.3  2.5  4.5
2  3  2.3  2.5  4.5
3  4  2.3  2.5  4.5
4  5  2.3  2.5  4.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:48:34