如何用Pandas合并含列表的列并去除重复值?
合并含列表的列并去重的实现方法
用pandas可以轻松实现这个需求,具体步骤如下:
1. 构造测试数据
先把你的源数据转换成DataFrame格式:
import pandas as pd import numpy as np df = pd.DataFrame({ 'col_0': ['aa', 'bb', 'cc'], 'col_a': [[1], ['a', 'b'], np.nan], 'col_b': [np.nan, ['b', 'c'], np.nan], 'col_c': [[2,3], ['c'], np.nan] })
2. 写合并去重的处理函数
定义一个函数,处理每行的col_a到col_c,把非空列表合并后去重:
def merge_and_deduplicate(row): # 收集所有非NaN的列表元素 all_elements = [] for col in ['col_a', 'col_b', 'col_c']: val = row[col] if not pd.isna(val): all_elements.extend(val) # 无有效数据返回NaN,否则去重后转列表 return np.nan if not all_elements else list(dict.fromkeys(all_elements))
注:用dict.fromkeys可以保留元素的原始出现顺序;如果不需要顺序,换成list(set(all_elements))即可
3. 生成合并列
用apply把函数作用到每一行,生成新列:
df['merged_a_to_c'] = df.apply(merge_and_deduplicate, axis=1)
最终结果
运行后得到的DataFrame和你期望的完全一致:
col_0 col_a col_b col_c merged_a_to_c 0 aa [1] NaN [2, 3] [1, 2, 3] 1 bb [a, b] [b, c] [c] [a, b, c] 2 cc NaN NaN NaN NaN
内容的提问来源于stack exchange,提问作者YeongHwa Jin
相关产品推荐
相关产品推荐

