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

基于两列组合去除Pandas DataFrame中的重复行

基于双向人员组合去重(保留消息一致的唯一行)

需求说明

需要基于person1和person2两列的双向组合删除重复行:

  • 例如person1=ryan、person2=delta与person1=delta、person2=ryan属于同一组合
  • 当该组合对应的messages值相同时,仅保留其中一行
  • 所有非重复的行需完整保留

原始数据重建代码

import pandas as pd

df = pd.DataFrame({"": [0,1,2,3,4,5,6],
                     "person1": ["ryan", "delta", "delta", "delta","bravo","alpha","ryan"], 
                     "person2": ["delta", "ryan", "alpha", "bravo","delta","ryan","alpha"], 
                     "messages": [1, 1, 2, 3,3,9,9]})

原始DataFrame

person1 person2 messages
0  0   ryan    delta   1
1  1   delta   ryan    1
2  2   delta   alpha   2
3  3   delta   bravo   3
4  4   bravo   delta   3
5  5   alpha   ryan    9
6  6   ryan    alpha   9

期望结果

finaldf
        person1 person2 messages
0   0   ryan    delta   1
1   2   delta   alpha   2
2   3   delta   bravo   3
3   5   alpha   ryan    9

解决方案代码

# 生成统一的双向组合键:对person1和person2排序后拼接
df['pair_key'] = df.apply(lambda row: '-'.join(sorted([row['person1'], row['person2']])), axis=1)

# 基于组合键+messages去重,保留每组第一行
finaldf = df.drop_duplicates(subset=['pair_key', 'messages'], keep='first').drop(columns=['pair_key'])

# 可选:重置索引
finaldf = finaldf.reset_index(drop=True)

代码说明

  1. 生成统一组合键:通过对每行的person1和person2字符串排序后拼接,让双向组合(如ryan-delta和delta-ryan)生成完全相同的pair_key,统一重复判定标准
  2. 精准去重:使用drop_duplicates,指定subset为pair_key和messages,确保只有当组合和消息内容都重复时才被判定为重复项
  3. 保留指定行:keep='first'保留每组重复项的第一行,若需要保留最后一行可改为keep='last'
  4. 清理临时列:删除用于辅助去重的pair_key列,得到符合要求的干净结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:46:18