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

列表中DataFrame去重:忽略第一行差异其余行相同即判定重复

问题原因

你原来的drop_duplicates不生效是因为pandas对Series里的DataFrame元素做重复判定时,要求整个DataFrame的结构、列名、所有行内容完全一致,你给出的两个测试DataFrame列名不同,自然会被判定为非重复项。

解决方案

我们可以自定义比较规则,仅提取每个DataFrame第二行到最后一行的内容生成唯一标识,用字典做去重即可:

完整可运行代码

import pandas as pd
import numpy as np

# 测试数据
df = []
df1 = pd.DataFrame(np.array([[1, 0.5], [2, 0.5]]),
                   columns=['id', 'df_1'])
df2 = pd.DataFrame(np.array([[1, 0.5], [2, 0.5]]),
                   columns=['id', 'df_2'])
df.append(df1)
df.append(df2)

# 自定义去重逻辑
seen = {}
for curr_df in df:
    # 提取第二行及之后的所有内容,转成可哈希的元组作为去重判定键
    compare_key = tuple(curr_df.iloc[1:].itertuples(index=False, name=None))
    # 相同键仅保留第一个出现的DataFrame,要保留最后一个可以删掉if判断直接赋值
    if compare_key not in seen:
        seen[compare_key] = curr_df

# 得到去重后的结果
unique = list(seen.values())
print(unique)

逻辑说明

  • curr_df.iloc[1:] 精准匹配需求,仅取第二行到最后一行的内容作为判定依据,忽略第一行差异
  • itertuples 将每行数据转成元组,外层再套tuple()后变为可哈希对象,可以作为字典的键实现去重
  • 去重保留哪条可自行调整:保留第一条就加if compare_key not in seen的判断,保留最后一条直接seen[compare_key] = curr_df即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 01:15:01