含NA条件的多列值合并生成新列技术问询
合并多列含多值的字符串并生成新列的解决方案
原始数据
ID merk_ac1 merk_ac2 merk_ac3 1 a NA NA 2 NA b NA 3 NA a b 4 a,b NA c
需求说明
需要将merk_ac1、merk_ac2、merk_ac3三列中的非缺失值(包括单元格内用逗号分隔的多值)合并为新列merk_ac,combine_first()无法处理多值场景,期望得到如下结果:
ID merk_ac1 merk_ac2 merk_ac3 merk_ac 1 a a 2 b b 3 a b a,b 4 a,b c a,b,c
实现代码
import pandas as pd import numpy as np # 构造原始DataFrame df = pd.DataFrame({ 'ID': [1, 2, 3, 4], 'merk_ac1': ['a', np.nan, np.nan, 'a,b'], 'merk_ac2': [np.nan, 'b', 'a', np.nan], 'merk_ac3': [np.nan, np.nan, 'b', 'c'] }) # 定义合并逻辑函数 def merge_merk_columns(row): all_elements = [] # 遍历目标列,收集所有非缺失值的元素 for col in ['merk_ac1', 'merk_ac2', 'merk_ac3']: value = row[col] if pd.notna(value): # 拆分单元格内的多值并加入列表 all_elements.extend(value.split(',')) # 用逗号连接所有元素 return ','.join(all_elements) # 生成新列merk_ac df['merk_ac'] = df.apply(merge_merk_columns, axis=1) # 将缺失值替换为空字符串,匹配期望的显示格式 df = df.fillna('') print(df)
代码说明
- 逐行处理多值:使用
apply(axis=1)遍历每一行数据,对每个非缺失值的单元格按逗号拆分,收集所有独立元素。 - 合并生成新列:将收集到的所有元素用逗号连接,生成
merk_ac列的内容。 - 格式化显示:用
fillna('')将DataFrame中的缺失值替换为空字符串,让输出格式与期望结果一致。
内容的提问来源于stack exchange,提问作者Ririn
相关产品推荐
相关产品推荐

