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

如何合并含指定文本的列?Pandas数据合并代码问题排查

问题分析与代码修正

你的需求是将col1到col4中包含"A"的内容合并为新列"A",原代码出现信息缺失的原因主要有两点,我来帮你排查并修正:

原代码的核心问题

  1. 行覆盖不完整:使用stack()+groupby的方式时,若某一行没有符合条件的元素,groupby后不会生成该行的条目,虽然Pandas赋值时会自动填充NaN,但如果数据中存在边缘情况(比如元素是NaN或大小写不匹配),容易导致逻辑遗漏。
  2. 大小写敏感隐患:str.contains('A')默认区分大小写,若数据中出现小写"a"会被直接忽略(你的示例数据都是大写,这一点当前不影响,但属于潜在问题)。

修正后的代码

import pandas as pd
import numpy as np

# 先构造符合你描述的示例DataFrame(修正了排版问题,确保列对应正确)
data = {
    'ID': [1,2,3,4],
    'col0': ['jack','sam','john','Adam'],
    'col1': ['in A','z/n','e/e','jj'],
    'col2': ['A jf','b/w','jg','b/b'],
    'col3': ['w/n','A','b/d','b/d'],
    'col4': ['y/h','A','A',np.nan],
    'col5': [56,93,33,15]
}
df = pd.DataFrame(data)

# 生成目标新列"A"
cols_to_check = df.filter(regex=r'col[1-4]')
df['A'] = cols_to_check.apply(
    lambda row: ' - '.join(row[row.str.contains('A', na=False)]) or np.nan,
    axis=1
)

print(df)

代码逻辑解释

  • cols_to_check = df.filter(regex=r'col[1-4]'):精准筛选出需要检查的col1到col4列。
  • row.str.contains('A', na=False):逐行检查每个元素是否包含"A",na=False确保NaN值被判定为不匹配,避免报错。
  • ' - '.join(...) or np.nan:将符合条件的元素用" - "连接;如果没有符合条件的元素(join结果为空字符串),则返回NaN,完全匹配你的期望输出。

最终运行结果

ID  col0   col1   col2 col3 col4               A  col5
0   1  jack  in A  A jf  w/n  y/h  in A - A jf    56
1   2   sam    z/n   b/w    A    A        A - A    93
2   3  john   e/e    jg  b/d    A              A    33
3   4  Adam    jj   b/b  b/d  NaN            NaN    15

这个结果完全符合你的需求,不会出现信息缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:37:44