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

Pandas中如何检查重名列的数值是否完全一致以删除重复列

Pandas重名列一致性校验实现方案

实现逻辑

  • 自动识别所有重复列名,按同名自动分组,无需手动指定列名
  • 对每组重名列逐行校验所有列的数值是否完全一致
  • 完全重复的组仅保留1列,存在数值差异的组保留所有列,可自动添加后缀避免后续重名异常

完整实现代码

import pandas as pd
import collections

# 第一步:统计所有重复列名
col_counter = collections.Counter(df.columns)
duplicated_cols = [col for col, cnt in col_counter.items() if cnt > 1]

keep_cols = []
processed_cols = set()
temp_columns = []

# 先生成临时带后缀的列名,避免重名索引异常
for idx, col in enumerate(df.columns):
    if col in duplicated_cols:
        temp_columns.append(f"{col}_{idx}")
    else:
        temp_columns.append(col)
df_temp = df.copy()
df_temp.columns = temp_columns

# 第二步:逐组校验重名列一致性
for col in duplicated_cols:
    # 取出当前组所有同名列
    group_cols = [c for c in temp_columns if c.startswith(f"{col}_")]
    group_df = df_temp[group_cols]
    # 校验所有列是否和第一列完全相等
    all_same = group_df.eq(group_df.iloc[:,0], axis=0).all().all()
    if all_same:
        # 完全重复仅保留第一列,后续还原原列名
        keep_cols.append((group_cols[0], col))
    else:
        # 存在差异保留所有列,保留后缀区分
        keep_cols.extend([(c, c) for c in group_cols])

# 加入所有非重名列
for col in temp_columns:
    origin_col = col.split("_")[0] if "_" in col else col
    if origin_col not in duplicated_cols:
        keep_cols.append((col, origin_col))

# 第三步:生成最终处理后的DataFrame
df_result = df_temp[[i[0] for i in keep_cols]]
df_result.columns = [i[1] for i in keep_cols]

运行效果说明

针对你提供的示例数据,运行后最终得到的df_result会保留1个ID列、2个TOTAL列,和预期需求完全一致。

常见问题说明

你之前写的判断逻辑if df['ID'] == df['ID'].all() == True存在两处错误:

  • 重名列取数时df['ID']返回的是多列组成的DataFrame,直接和布尔值对比会返回布尔矩阵,不能放在if判断中
  • all()调用位置错误,应该先做列对比,再调用all()判断全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:04