如何按Pos列条件合并SMN后接B-PER的两个连续行
数据表连续行合并实现方案
需求规则说明
- 定位Pos列值为
SMN的行,检查其下紧邻行的Pos列值 - 若下一行值为
B-PER,则合并这两行;若下一行不是B-PER,则不执行合并
原始数据样例

预期处理结果
方案1:Excel 操作实现
- 新增辅助列
合并标记,假设Pos列为A列、数据从第2行开始,在辅助列第2行输入公式:=IF(AND(A2="SMN",A3="B-PER"),1,IF(AND(A2="B-PER",A1="SMN"),2,0)) - 将公式下拉填充至所有数据行
- 筛选
合并标记=1的行,在需要合并的内容列(比如文本内容列C)输入公式=C2&" "&C3,按Ctrl+Enter批量填充 - 筛选
合并标记=2的行,右键删除整行后取消筛选,清空辅助列即可得到结果
方案2:Python Pandas 代码实现
import pandas as pd # 读取数据,可根据实际文件格式替换为read_csv等方法 df = pd.read_excel("你的原始数据文件路径.xlsx") # 生成上下行Pos偏移列,用于匹配合并条件 df["next_pos"] = df["Pos"].shift(-1) df["prev_pos"] = df["Pos"].shift(1) # 过滤掉需要被合并的、紧跟在SMN后的B-PER行 result_df = df[~((df["Pos"] == "B-PER") & (df["prev_pos"] == "SMN"))].copy() # 匹配需要合并的SMN行,合并对应内容列(示例中内容列名为Content,自行替换为实际列名) merge_condition = (result_df["Pos"] == "SMN") & (result_df["next_pos"] == "B-PER") b_per_contents = df[df["Pos"] == "B-PER"]["Content"].values result_df.loc[merge_condition, "Content"] = result_df.loc[merge_condition, "Content"] + " " + b_per_contents # 清理临时辅助列 result_df = result_df.drop(columns=["next_pos", "prev_pos"]) # 导出结果 result_df.to_excel("合并后结果.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

