如何删除pandas DataFrame中列值顺序颠倒的重复行
实现方案
核心思路是生成不区分队伍顺序的标准化唯一标识,再基于该标识去重,性能远高于逐行遍历判断。
假设你的对阵信息存储在名为matchup的列中,如果实际列名不同,替换对应位置的列名即可。
步骤1:拆分对阵列得到两个队伍
按分隔符/把对阵列拆分为两个单独的队伍列:
import pandas as pd df[['team1', 'team2']] = df['matchup'].str.split('/', expand=True)
步骤2:生成标准化唯一键
常规数据量(10万行以内)用apply即可:
对每一行的两个队伍名排序后重新拼接,保证不管队伍顺序如何,同一个对阵生成的键完全一致:
df['match_key'] = df.apply(lambda x: '/'.join(sorted([x['team1'], x['team2']])), axis=1)
大数据量(10万行以上)推荐用numpy向量化操作,性能提升10倍以上:
import numpy as np arr = np.sort(df[['team1', 'team2']].values, axis=1) df['match_key'] = arr[:, 0] + '/' + arr[:, 1]
步骤3:按唯一键去重
保留每组重复数据的第一行(可修改keep参数调整保留规则),最后删除临时生成的辅助列即可:
df = df.drop_duplicates(subset='match_key', keep='first').drop(columns=['team1', 'team2', 'match_key'])
内容的提问来源于stack exchange,提问作者johndoe1839
相关产品推荐
相关产品推荐

