对比逗号分隔字符串与列表两列,追加保序无重复缺失项的实现
Pandas 合并多值列并保留顺序去重方案
实现代码
import pandas as pd # 构造示例数据,可替换为你的实际数据 df = pd.DataFrame({ 'Column A': ['BB,CC', 'AA,BB'], 'Column B': [['AA', 'BB'], ['AA', 'BB']] }) def merge_unique(row): # 拆分A列逗号分隔字符串为列表 a_items = row['Column A'].split(',') # 拼接A、B两列的元素 all_items = a_items + row['Column B'] # 按插入顺序去重,Python 3.7+ 原生支持 unique_items = list(dict.fromkeys(all_items)) # 转回逗号分隔字符串 return ','.join(unique_items) # 按行应用处理逻辑,生成结果列 df['Column C'] = df.apply(merge_unique, axis=1)
运行后df['Column C']的输出完全符合预期:
0 BB,CC,AA 1 AA,BB Name: Column C, dtype: object
如果偏好更简洁的写法,也可以直接用lambda实现:
df['Column C'] = df.apply( lambda row: ','.join(dict.fromkeys(row['Column A'].split(',') + row['Column B'])), axis=1 )
逻辑说明
- 使用
apply时指定axis=1,每次传入的参数为当前行的完整数据,可同时读取同一行的Column A和Column B的值,解决了原代码读取整列A的问题 dict.fromkeys()会将传入列表的元素作为字典的键,自动去重,Python 3.7及以上版本字典默认保留元素插入顺序,完全满足保留原有顺序的需求,无需使用会打乱顺序的set
旧版本兼容方案
如果使用Python 3.7以下的版本,替换去重逻辑为有序字典即可:
from collections import OrderedDict unique_items = list(OrderedDict.fromkeys(all_items))
内容的提问来源于stack exchange,提问作者Billie_H
相关产品推荐
相关产品推荐

