如何合并含指定文本的列?Pandas数据合并代码问题排查
问题分析与代码修正
你的需求是将col1到col4中包含"A"的内容合并为新列"A",原代码出现信息缺失的原因主要有两点,我来帮你排查并修正:
原代码的核心问题
- 行覆盖不完整:使用
stack()+groupby的方式时,若某一行没有符合条件的元素,groupby后不会生成该行的条目,虽然Pandas赋值时会自动填充NaN,但如果数据中存在边缘情况(比如元素是NaN或大小写不匹配),容易导致逻辑遗漏。 - 大小写敏感隐患:
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
相关产品推荐
相关产品推荐

