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

仅当A、B列为空时合并C列上下行的Pandas数据处理问题

解决DataFrame中仅合并空行A/B对应的C列到上一行的问题

需求回顾

仅当某行的A、B列为空时,将该行C列的值合并到上一行的C列中;若连续两行的A、B列均非空则跳过。

原始数据

A        B       C
12525    1FWE23   1H654D
                  14654        
24798    14654    S56E82
65116    63546    38945        
46456    46485    R68R45
                  AD545    
A5D66    45346    QA6683       

预期输出

A        B       C
12525    1FWE23   1H654D 14654       
                   
24798    14654    S56E82
65116    63546    38945
46456    46485    R68R45 AD545    
                  
A5D66    45346    QA6683       

原代码问题分析

你尝试的代码:

df2.loc[df2['A'] != '', 'C'] = df2["C"] + ' ' + df2["C"].shift(-1).fillna("")

错误核心在于:只要A列非空就会强制拼接下一行的C值,完全没有判断下一行的A、B是否为空。比如原始数据中24798行(A非空)的下一行65116行A、B都非空,代码依然会把这两行的C合并,直接违反了“连续非空行跳过”的规则。

正确解决方案

以下是精准匹配需求的实现代码:

import pandas as pd

# 构造原始数据(实际使用时可替换为你的数据源)
data = {
    'A': ['12525', '', '24798', '65116', '46456', '', 'A5D66'],
    'B': ['1FWE23', '', '14654', '63546', '46485', '', '45346'],
    'C': ['1H654D', '14654', 'S56E82', '38945', 'R68R45', 'AD545', 'QA6683']
}
df = pd.DataFrame(data)

# 定位所有A、B同时为空的行
empty_rows = df[(df['A'] == '') & (df['B'] == '')].index

# 遍历空行,将C合并到上一行并清空当前行C
for idx in empty_rows:
    if idx > 0:  # 避免第一行是空行时出现索引错误
        df.loc[idx-1, 'C'] = f"{df.loc[idx-1, 'C']} {df.loc[idx, 'C']}"
        df.loc[idx, 'C'] = ''

# 打印结果
print(df.to_string(index=False))

代码逻辑说明

  1. 精准锁定目标行:只筛选出A和B都为空的行,这些是唯一需要被合并的对象。
  2. 定向合并操作:仅将这些空行的C值追加到上一行的C中,同时清空当前行的C,完全不会干扰连续非空的行。
  3. 边界异常处理:通过idx > 0的判断,避免第一行是空行时出现索引越界问题(如果你的数据不会出现这种情况,可省略该判断)。

运行后输出的结果完全符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:11:15