如何用Python在不删除整行的情况下去除DataFrame每行内的重复值?
Pandas每行去除重复病症的解决方案
首先看你的原始DataFrame创建代码:
import pandas as pd data=[["John","Alzheimer's","Infection","Alzheimer's"],["Kevin","Pneumonia","Pneumonia","Tuberculosis"]] df=pd.DataFrame(data,columns=['Name','Problem1','Problem2','Problem3'])
你需要的是每行内去除重复的病症,而drop_duplicates()是针对整行重复的情况,所以不适用。这里提供两种实用的解决方式:
方式一:将去重后的病症存为新列
这种方式适合后续对病症做批量分析,把每行的唯一病症整理成列表:
# 对每行从第2列开始(跳过Name)去重,生成唯一病症列表 df['Unique_Problems'] = df.apply(lambda row: list(pd.unique(row[1:])), axis=1) # 查看结果 print(df)
输出结果:
Name Problem1 Problem2 Problem3 Unique_Problems 0 John Alzheimer's Infection Alzheimer's [Alzheimer's, Infection] 1 Kevin Pneumonia Pneumonia Tuberculosis [Pneumonia, Tuberculosis]
方式二:保持原列结构,重复位置填充空值
如果需要保留原表格的列结构,把重复出现的病症位置替换为空值:
def clean_row_duplicates(row): seen = set() cleaned = [] for value in row: if value not in seen: seen.add(value) cleaned.append(value) else: cleaned.append(None) return cleaned # 应用函数到每行,保持列名不变 df_cleaned = df.apply(clean_row_duplicates, axis=1, result_type='expand') df_cleaned.columns = df.columns # 查看结果 print(df_cleaned)
输出结果:
Name Problem1 Problem2 Problem3 0 John Alzheimer's Infection None 1 Kevin Pneumonia None Tuberculosis
内容的提问来源于stack exchange,提问作者dawgtor
相关产品推荐
相关产品推荐

