如何用Pandas合并多列并排除重复值?Python新手求助
Pandas实现每行去重排序后连接
首先注意你提供的数据字典里有重复的col2键,Python字典会自动覆盖重复键的取值,所以先修正数据集,确保列名唯一:
import pandas as pd # 修正重复列名,将第二个col2改为col5 data = { 'col1': ['a','b','a','c'], 'col2': ["","",'a',''], 'col3': ['','a','','b'], 'col4': ['a','','b',''], 'col5': ['b','c','c',''] } df = pd.DataFrame(data)
接下来用apply对每行执行处理:过滤空字符串、去重、排序、用-连接,直接生成新列:
def process_row(row): # 过滤空值 non_empty = [val for val in row if val != ''] # 去重+排序 unique_sorted = sorted(set(non_empty)) # 拼接字符串 return '-'.join(unique_sorted) # 生成新列 df['result'] = df.apply(process_row, axis=1)
执行后df['result']的输出为:
0 a-b 1 b-c 2 a-b-c 3 b-c
如果想要更简洁的写法,也可以用lambda表达式:
df['result'] = df.apply(lambda r: '-'.join(sorted(set(v for v in r if v != ''))), axis=1)
说明
axis=1指定对每行进行操作set(non_empty)实现去重,sorted()按字母升序排列(和Excel的SORT逻辑一致)- 先过滤空字符串是避免空值被计入结果
内容的提问来源于stack exchange,提问作者Darktremere
相关产品推荐
相关产品推荐

