如何筛选Pandas DataFrame中split_counterparties列列表值重复的行
筛选Pandas DataFrame中列表类型列重复的行
由于Pandas无法直接对列表类型的列进行重复值检测(列表属于不可哈希类型),你可以通过以下步骤实现需求:
核心思路
先将列表转换为可哈希的元组类型,再基于元组完成重复行的筛选。
方法一:用duplicated标记所有重复行
这种方式会保留所有重复出现的行(包括第一次出现的重复项):
# 假设你的DataFrame名为df,目标列是split_counterparties # 1. 将列表转为元组,生成临时列 df['temp_tuple'] = df['split_counterparties'].apply(tuple) # 2. 标记所有重复的元组行(keep=False会标记所有重复出现的条目) duplicate_mask = df['temp_tuple'].duplicated(keep=False) # 3. 筛选出重复行,并删除临时列 filtered_df = df[duplicate_mask].drop('temp_tuple', axis=1)
方法二:用value_counts统计重复次数
如果需要明确筛选出现次数≥2的行,可以用这种方式:
# 1. 转换列表为元组并统计出现次数 tuple_counts = df['split_counterparties'].apply(tuple).value_counts() # 2. 提取出现次数≥2的元组 repeat_tuples = tuple_counts[tuple_counts >= 2].index # 3. 筛选符合条件的行 filtered_df = df[df['split_counterparties'].apply(tuple).isin(repeat_tuples)]
额外处理:忽略列表元素顺序的重复
如果你的场景中[Bass Pro LLC, Cadence Design Systems Inc]和[Cadence Design Systems Inc, Bass Pro LLC]算重复,需要先对列表排序再转元组:
# 先排序列表再转元组 df['temp_tuple'] = df['split_counterparties'].apply(lambda x: tuple(sorted(x))) # 后续重复筛选步骤和上面一致
内容的提问来源于stack exchange,提问作者sanster9292
相关产品推荐
相关产品推荐

