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

如何在含字典与自定义对象的DataFrame中删除重复列?

解决含字典/自定义类列的DataFrame重复列删除问题

常规的df.T.drop_duplicates().T方法会因为字典、betfairlightweight.Event实例这类不可哈希类型报错,这里提供两种解决方案,同时能处理_data列重复的情况:


方案一:逐列内容精准比对(兼容性强)

通过自定义函数处理字典和Event实例的特殊比对逻辑,确保列内容完全一致才判定为重复:

1. 定义列比对函数

def columns_are_identical(col1, col2):
    for val1, val2 in zip(col1, col2):
        # 字典类型:直接比较内容是否一致
        if isinstance(val1, dict) and isinstance(val2, dict):
            if val1 != val2:
                return False
        # Event实例:通过内置的_data字典比对完整原始数据
        elif isinstance(val1, betfairlightweight.resources.bettingresources.Event) and isinstance(val2, betfairlightweight.resources.bettingresources.Event):
            if val1._data != val2._data:
                return False
        # 其他类型用默认相等判断
        else:
            if val1 != val2:
                return False
    return True

2. 遍历筛选不重复列

import pandas as pd
from betfairlightweight.resources.bettingresources import Event

# 假设你的原始DataFrame为df
retained_columns = []

for current_col in df.columns:
    is_duplicate = False
    # 和已保留的每一列做比对
    for kept_col in retained_columns:
        if columns_are_identical(df[current_col], df[kept_col]):
            is_duplicate = True
            break
    if not is_duplicate:
        retained_columns.append(current_col)

# 得到去重后的DataFrame
df_deduplicated = df[retained_columns]

方案二:哈希化转换后去重(性能更优)

将不可哈希的列值转为可哈希类型,再用常规的drop_duplicates方法处理,适合大体积DataFrame:

import json
import pandas as pd
from betfairlightweight.resources.bettingresources import Event

def to_hashable(val):
    if isinstance(val, dict):
        # 用排序后的JSON字符串确保字典顺序不影响比对结果
        return json.dumps(val, sort_keys=True)
    elif isinstance(val, Event):
        # 可以用事件ID快速比对,或用val._data转JSON确保完整一致
        return val.id
    else:
        return val

# 生成转置后可哈希的临时DataFrame
temp_df = df.T.applymap(to_hashable)
# 筛选非重复列
df_deduplicated = df.loc[:, ~temp_df.duplicated(keep='first')]

关键说明

  • 对于Event实例,用_data比对能确保实例对应完全相同的事件数据;若只需判断事件唯一性,用id性能更快。
  • 两种方案都能处理_data列自身重复的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:05:55