You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含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)

代码说明

  1. 逐行处理多值:使用apply(axis=1)遍历每一行数据,对每个非缺失值的单元格按逗号拆分,收集所有独立元素。
  2. 合并生成新列:将收集到的所有元素用逗号连接,生成merk_ac列的内容。
  3. 格式化显示:用fillna('')将DataFrame中的缺失值替换为空字符串,让输出格式与期望结果一致。

内容的提问来源于stack exchange,提问作者Ririn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:27:19