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

Python:将DataFrame中单元格值与同行前一列值拼接

解决方案

假设你使用的是Pandas库,以下是实现需求的两种可行方法,均已考虑None值的处理:

方法一:逐列循环+行处理(逻辑直观)

先构造一个匹配你场景的示例DataFrame:

import pandas as pd

# 模拟包含None值的原始DataFrame
df = pd.DataFrame({
    'col1': ['a', None, 'c'],
    'col2': [None, 'b', 'd'],
    'col3': ['e', 'f', None]
})

执行拼接逻辑:

# 从第二列开始遍历所有列
for col in df.columns[1:]:
    # 获取当前列的前一列名称
    prev_col = df.columns[df.columns.get_loc(col) - 1]
    # 按行拼接:若前后值都不为None则拼接,否则保留非None的有效数据
    df[col] = df.apply(
        lambda row: f"{row[prev_col]}{row[col]}" 
        if row[prev_col] is not None and row[col] is not None 
        else row[prev_col] or row[col],
        axis=1
    )

处理后的结果示例:

col1col2col3
aaae
Nonebbf
ccdcd

方法二:批量处理(性能更优,适合大数据集)

如果你的DataFrame行数较多,推荐这种无需逐行遍历的方法,执行效率更高:

import pandas as pd

df = pd.DataFrame({
    'col1': ['a', None, 'c'],
    'col2': [None, 'b', 'd'],
    'col3': ['e', 'f', None]
})

# 先把None转为空字符串,避免拼接报错
temp_df = df.fillna('')
# 从第二列开始,逐列与前一列拼接
for i in range(1, len(temp_df.columns)):
    temp_df.iloc[:, i] = temp_df.iloc[:, i-1] + temp_df.iloc[:, i]
# 把拼接后的空字符串转回None,保持原始数据格式
df = temp_df.replace('', None)

最终结果与方法一完全一致。

关键说明

  • 两种方法都避免了None值拼接报错的问题,同时尽可能保留有效数据
  • 严格遵循需求:第一列保持原样,仅从第二列开始执行同行前一列的拼接逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:33:17