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

如何在Pandas中合并特定连续行并替换为指定值?

解决Pandas中分组内连续特定行合并替换的问题

需求分析

在同一uniqueID分组内,找到连续的'hello'后接'goodbye'的行对,将这两行合并为一行并替换为'greeting',保留原hello行的idx,删除后续的goodbye行,其余行保持原样。

实现步骤及代码

1. 数据预处理(清理字符串引号)

读取数据后,先清理String列的单引号,避免后续匹配判断出错:

import pandas as pd

df = pd.read_csv('filename.csv', delimiter=',')
# 移除String列的单引号
df['String'] = df['String'].str.strip("'")

2. 标记目标行

通过分组内的行偏移(shift),精准标记需要替换的hello行和需要删除的goodbye行:

# 标记当前行是hello且下一行是goodbye的行(需要替换为greeting)
df['is_target_hello'] = df['String'] == 'hello'
df['next_is_goodbye'] = df.groupby('uniqueID')['String'].shift(-1) == 'goodbye'
df['need_replace'] = df['is_target_hello'] & df['next_is_goodbye']

# 标记当前行是goodbye且上一行是hello的行(需要删除)
df['is_target_goodbye'] = df['String'] == 'goodbye'
df['prev_is_hello'] = df.groupby('uniqueID')['String'].shift(1) == 'hello'
df['need_drop'] = df['is_target_goodbye'] & df['prev_is_hello']

3. 替换并过滤行

将标记的行替换为目标字符串,再过滤掉需要删除的行,最后清理临时辅助列:

# 把需要替换的行的String改为greeting
df.loc[df['need_replace'], 'String'] = 'greeting'

# 过滤掉要删除的行,同时移除临时列
result_df = df[~df['need_drop']].drop(columns=['is_target_hello', 'next_is_goodbye', 'need_replace', 'is_target_goodbye', 'prev_is_hello', 'need_drop'])

# 可选:恢复String列的单引号格式
result_df['String'] = "'" + result_df['String'] + "'"

print(result_df)

代码说明

  • 用groupby('uniqueID')限定仅在同一分组内判断连续行,避免跨分组误匹配;
  • shift(-1)和shift(1)分别获取当前行的下一行、上一行值,结合布尔判断精准定位目标行对;
  • 通过布尔索引过滤行,确保只保留需要的内容,同时清理临时列避免数据冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:31