Pandas中反转列且Verified值不同时的重复项分组实现
解决方案
要实现不管Verified值是否相同,只要TranscodeA和TranscodeB互为反转就归入同一重复组的需求,可以通过生成标准化分组键的方式来实现,具体步骤如下:
步骤说明
- 生成统一分组键:对每行的
TranscodeA和TranscodeB进行排序,得到一个与顺序无关的唯一标识(比如排序后拼接成字符串)。 - 分配组ID:为每个唯一的分组键分配连续的组编号(如DG1、DG2)。
- 标记无重复项:对分组键仅出现一次的行,标记为
NA。
代码实现
import pandas as pd import numpy as np # 读取你的数据(示例用给定数据) data = """TranscodeA,TranscodeB,Verfied TC06396,TC02582,Yes TC01232,TC05465,Yes TC01474,TC02582,No TC02582,TC06396,Yes TC01591,TC03573,Yes TC05465,TC01232,No TC03573,TC01591,No TC03573,TC01591,Maybe TC03573,TC01591,Yaa TC03573,TC01591,Nah""" df = pd.read_csv(pd.io.common.StringIO(data)) # 修正列名拼写错误 df.rename(columns={"Verfied": "Verified"}, inplace=True) # 生成标准化分组键:排序后拼接两个Transcode df["group_key"] = df.apply(lambda row: "-".join(sorted([row["TranscodeA"], row["TranscodeB"]])), axis=1) # 统计每个分组键的出现次数 key_counts = df["group_key"].value_counts() # 为重复的分组键分配组ID group_mapping = {key: f"DG{i+1}" for i, key in enumerate(key_counts[key_counts > 1].index)} # 生成Duplicate Group列,无重复项标记为NA df["Duplicate Group"] = df["group_key"].map(group_mapping).fillna("NA") # 清理中间列 df.drop(columns=["group_key"], inplace=True) print(df)
示例输出
运行代码后,输出结果如下:
TranscodeA TranscodeB Verified Duplicate Group 0 TC06396 TC02582 Yes DG1 1 TC01232 TC05465 Yes DG2 2 TC01474 TC02582 No NA 3 TC02582 TC06396 Yes DG1 4 TC01591 TC03573 Yes DG3 5 TC05465 TC01232 No DG2 6 TC03573 TC01591 No DG3 7 TC03573 TC01591 Maybe DG3 8 TC03573 TC01591 Yaa DG3 9 TC03573 TC01591 Nah DG3
代码解释
group_key:通过sorted对两个Transcode排序后拼接,确保(A,B)和(B,A)得到完全相同的键,实现顺序无关的分组依据。group_mapping:仅为出现次数大于1的分组键分配组ID,避免给无重复的行生成无效组。- 最终通过
map和fillna完成分组标记,精准生成需求的Duplicate Group列。
内容的提问来源于stack exchange,提问作者get_unstuck
相关产品推荐
相关产品推荐

