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

Python中基于多列及特定条件去除重复行的实现方法

问题:移除DataFrame中互为交换的重复行

原始DataFrame

CUI1        CUI2        RELA    SL          CUI_x       SAB_x  CODE_x     STR_x               TTY_x CUI_y       SAB_y       CODE_y      STR_y                   TTY_y
C0010356    C0205721    same_as SNOMEDCT_US C0010356    MDR    10011409   Cross infection     PT    C0205721    MDR         10029803    Nosocomial infection    PT
C0205721    C0010356    same_as SNOMEDCT_US C0205721    MDR    10029803   Nosocomial infection PT   C0010356    MDR         10011409    Cross infection         PT
C0010356    C0205721    same_as SNOMEDCT_US C0010356    MDR    10011409   Cross infection     LLT   C0205721    MDR         10029803    Nosocomial infection    PT
C0205721    C0010356    same_as SNOMEDCT_US C0205721    MDR    10029803   Nosocomial infection PT   C0010356    MDR         10011409    Cross infection         LLT

需求说明

当多行满足以下两个条件时,仅保留其中一行:

  • 具有相同的TTY_x和TTY_y层级
  • CODE_x与CODE_y的值互为交换(即A行的CODE_x是B行的CODE_y,A行的CODE_y是B行的CODE_x)

期望输出

CUI1        CUI2        RELA    SL          CUI_x       SAB_x  CODE_x     STR_x               TTY_x CUI_y       SAB_y       CODE_y      STR_y                   TTY_y
C0010356    C0205721    same_as SNOMEDCT_US C0010356    MDR    10011409   Cross infection     PT    C0205721    MDR         10029803    Nosocomial infection    PT
C0205721    C0010356    same_as SNOMEDCT_US C0205721    MDR    10029803   Nosocomial infection PT   C0010356    MDR         10011409    Cross infection         LLT

解决方案(Pandas实现)

核心思路是为每组互为交换的行生成唯一标识,再基于标识去重:

import pandas as pd

# 假设原始数据已加载为DataFrame df
# df = pd.read_csv(...)

# 生成分组键:结合TTY层级+排序后的CODE组合,确保交换CODE的行拥有相同键
df['group_key'] = df.apply(
    lambda row: (row['TTY_x'], row['TTY_y'], tuple(sorted([row['CODE_x'], row['CODE_y']]))),
    axis=1
)

# 按分组键去重,保留每组第一行,最后删除辅助列
result_df = df.drop_duplicates(subset='group_key', keep='first').drop(columns='group_key')

# 输出结果
print(result_df)

代码解释

  • tuple(sorted([row['CODE_x'], row['CODE_y']])):将每行的两个CODE排序后转为元组,让交换CODE的行得到相同的标识
  • 把TTY_x、TTY_y和排序后的CODE元组组合成group_key,确保只有相同层级且CODE互为交换的行才会被归为同一组
  • drop_duplicates保留每组第一行,最后删除辅助列得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:51:12