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

Pandas DataFrame行处理:将以and开头的行拼接到上一行的实现问题

解决方案

核心思路是通过分组标记将连续需要拼接的行归为同一组,再聚合拼接,支持扩展到任意关键字的批量拼接:

  1. 首先构造通用处理函数,可复用处理不同开头关键字的拼接需求
import pandas as pd

# 通用拼接函数:将所有以指定关键字开头的行拼接到上一行末尾
def concat_keyword_rows(df, col, keyword):
    # 生成分组ID:每遇到一个非关键字开头的行,分组ID+1,后续连续的关键字开头行归入同一组
    group_mask = (~df[col].str.startswith(keyword)).cumsum()
    # 同组内容按空格拼接
    return df.groupby(group_mask, as_index=False)[col].agg(" ".join)

# -------------------------- 调用示例 --------------------------
# 构造你的示例DataFrame
df = pd.DataFrame({
    "join": [
        "inner join xx",
        "on xx", 
        "and xx",
        "and yy",
        "and aa",
        "inner join zz"
    ]
})

# 处理and开头的行拼接
df = concat_keyword_rows(df, "join", "and")
print(df)

运行后输出的结果就是你需要的效果:

join
0                inner join xx
1  on xx and xx and yy and aa
2                inner join zz
  1. 后续需要处理on开头的行时,直接复用函数再次调用即可:
# 处理on开头的行拼接到上一行
df = concat_keyword_rows(df, "join", "on")
print(df)

运行后会得到:

join
0  inner join xx on xx and xx and yy and aa
1                                inner join zz

原代码问题说明

你原来的代码只能单次处理下一行是and的情况,无法处理连续多个and开头的行,也没有删除已经被拼接的冗余行,所以会遗留多余行。用分组聚合的方式可以一次性处理所有连续的目标行,不需要循环逐行处理,效率更高也更稳定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:48:03