如何在Pandas DataFrame中为非空列批量拼接column1内容并删除原column1
Pandas实现指定列内容条件拼接至其他列并删除原列
针对你提出的需求,我整理了清晰的实现思路和两种高效的Pandas代码方案,直接就能套用:
问题复现
先把你的示例DataFrame用代码还原出来,方便测试:
import pandas as pd import numpy as np df = pd.DataFrame({ 'column1': [1, 2, 3], 'column2': ['xx', 'xx', 'xx'], 'column3': ['cc', 'cc', np.nan], 'column4': [np.nan, 'gg', 'gg'], 'columnn': ['aa', 'aa', 'aa'] })
实现思路
核心逻辑分三步,简单易懂:
- 锁定目标列:先筛选出除
column1之外的所有列,明确需要处理的列集合 - 条件拼接操作:对每个目标列,仅对非
NaN的单元格执行拼接——把column1对应行的值转成字符串后,和当前单元格内容合并;如果是NaN则保持原样 - 收尾清理:将处理后的列替换回原DataFrame,最后删除
column1列
代码实现
这里提供两种方案,你可以根据数据量选择:
方案1:简洁的apply写法(适合小数据集)
这种写法逻辑直观,容易理解:
# 遍历所有需要处理的列 for col in df.columns.drop('column1'): # 逐行判断:非NaN则拼接,否则保留原值 df[col] = df.apply(lambda row: str(row['column1']) + row[col] if pd.notna(row[col]) else row[col], axis=1) # 删除column1列 df = df.drop('column1', axis=1)
方案2:高效的向量化写法(适合大数据集)
Pandas的向量化操作比apply快很多,数据量越大优势越明显:
# 先把column1转成字符串,避免拼接时的类型问题 col1_str = df['column1'].astype(str) # 遍历处理每一列 for col in df.columns.drop('column1'): # 仅对非NaN值执行拼接,NaN值用空字符串占位 df[col] = col1_str + df[col].where(pd.notna(df[col]), other='') # 把空字符串转回NaN,还原原始空值状态 df[col] = df[col].replace('', np.nan) # 删除原column1列 df = df.drop('column1', axis=1)
最终效果
运行任意一种方案后,都会得到你想要的结果:
column2 column3 column4 columnn 0 1xx 1cc NaN 1aa 1 2xx 2cc 2gg 2aa 2 3xx NaN 3gg 3aa
小提醒
- 如果你的
column1本身就是字符串类型,可以省略astype(str)这一步 - 大数据集优先选方案2,速度提升很明显
内容的提问来源于stack exchange,提问作者redplanet
相关产品推荐
相关产品推荐

