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

如何在Pandas DataFrame中移除互为颠倒的类似字符串重复项

在Pandas中移除互为颠倒的配对重复项

可以实现这个需求,核心思路是给每个配对生成标准化的唯一键,让互为颠倒的配对拥有相同的键,再基于这个键去重。具体步骤如下:

步骤1:生成标准化配对键

先统一Q0_0列的分隔格式,拆分出配对的两个元素,排序后重新拼接,确保颠倒的配对生成相同的键:

import pandas as pd
import numpy as np

# 你的原始DataFrame
df=pd.DataFrame({
    'Q0_0': ["A vs. Z", "A vs. Bc", "B vs. Z", "B vs Bc", "Bc vs. A", "Bc vs. B", "Z vs. A", "Z vs. B", "C vs. A", "Bc vs. A"],
    'Q1_1': [np.random.randint(1,100) for i in range(10)],
    'Q1_2': np.random.random(10),
    'Q1_3': np.random.randint(2, size=10),
    'Q2_1': [np.random.randint(1,100) for i in range(10)],
    'Q2_2': np.random.random(10),
    'Q2_3': np.random.randint(2, size=10),
    'Q3_1': [np.random.randint(1,100) for i in range(10)],
    'Q3_2': np.random.random(10),
    'Q3_3': np.random.randint(2, size=10),
    'Q4_1': [np.random.randint(1,100) for i in range(10)],
    'Q4_2': np.random.random(10),
    'Q4_3': np.random.randint(2, size=10)
})

# 生成标准化配对键
df['pair_key'] = df['Q0_0']\
    .str.replace('vs', 'vs.', regex=False)  # 统一分隔符为vs.
    .str.split('vs.', expand=True)\
    .apply(lambda x: sorted([x[0].strip(), x[1].strip()]), axis=1)  # 拆分后排序元素
    .str.join(' vs. ')  # 重新拼接成标准化字符串

步骤2:基于键去重并清理临时列

使用drop_duplicates保留每个标准化键的首次出现,最后删除临时的pair_key列:

# 去重,保留首次出现的行
result_df = df.drop_duplicates(subset='pair_key', keep='first').drop(columns='pair_key')

# 输出结果
print(result_df)

效果说明

执行后会得到你预期的结果:

  • 互为颠倒的配对(如"A vs. Z"和"Z vs. A")会被视为同一组,仅保留第一次出现的行;
  • 完全重复的行(如第4、9行的"Bc vs. A")也会被一并移除;
  • 无颠倒配对的行(如"C vs. A")会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:51:02