如何在Pandas DataFrame中按列去除重复值并达成指定效果?
Pandas按列去除重复值并对齐行结构的实现方案
这问题我熟!要实现你要的按列去重、保留元素出现顺序且对齐行的效果,咱们可以一步步来操作,思路很清晰:
首先构造原始DataFrame
先把你给出的表格数据转换成Pandas能处理的DataFrame(注意最后一行的缺失值用np.nan表示):
import pandas as pd import numpy as np # 构造原始数据 df = pd.DataFrame({ 'set1': ['apple', 'apple', 'orange', 'banana', 'grape'], 'set2': ['apple', 'orange', 'banana', 'lemon', 'lemon'], 'set3': ['orange', 'banana', 'pear', 'pear', np.nan], 'set4': ['orange', 'orange', 'banana', 'lemon', np.nan] })
核心处理步骤
咱们的目标是每一列保留首次出现的唯一值,去掉后续重复项,然后把各列的结果对齐合并:
定义单列去重函数:先去掉列中的缺失值,再提取唯一值(
unique()方法会严格保留元素第一次出现的顺序,完美匹配需求)def get_unique_column(col): # 过滤缺失值后提取唯一值 return col.dropna().unique()遍历所有列提取唯一值:用字典存储每一列的去重结果
unique_columns = {col_name: get_unique_column(df[col_name]) for col_name in df.columns}合并为结果DataFrame:把每一列的去重结果转成Series,再按列合并,Pandas会自动对齐行,短列的末尾会填充
NaNresult_df = pd.concat( [pd.Series(values, name=col) for col, values in unique_columns.items()], axis=1 )可选:替换缺失值为空字符串:如果不想显示
NaN,可以把它换成空字符串,和你给出的示例格式完全一致result_df = result_df.fillna('')
最终结果
运行完上面的代码后,result_df就是你想要的效果:
set1 set2 set3 set4 0 apple apple orange orange 1 orange orange banana banana 2 banana pear pear lemon 3 grape lemon
内容的提问来源于stack exchange,提问作者lindak
相关产品推荐
相关产品推荐

