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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:22:39