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

如何修改Python代码仅拼接连续相同name和day行的text字段?

问题描述

现有数据集:

name  day        text    
john  1 october  hello
john  1 october  world
mary  1 october  good friend
john  1 october  python is cool
peter 1 october  love is
peter 1 october  in the air

需求:仅将连续行中name和day字段均相同的text字段拼接,非连续的相同name+day组合不合并。期望输出:

name  day        text
john  1 october  hello world
mary  1 october  good friend
john  1 october  python is cool
peter 1 october  love is in the air

当前使用代码:

data = data.fillna(' ')
data = data.groupby(['name', 'day'], as_index=False).agg({'text': ' '.join})

但该代码会将同一name+day的所有text全量拼接,不符合需求,得到错误结果:

name  day        text
john  1 october  hello world python is cool
mary  1 october  good friend
peter 1 october  love is in the air
解决方案

核心思路是先标记出连续相同的name+day分组,再针对这些分组进行拼接,而非直接按name+day全局分组。

修改后的代码如下:

import pandas as pd

# 填充空值
data = data.fillna(' ')

# 创建分组标识:当name或day与前一行不同时,分组号+1
data['group_id'] = (data[['name', 'day']] != data[['name', 'day']].shift()).any(axis=1).cumsum()

# 按group_id分组拼接text,保留name和day
result = data.groupby('group_id', as_index=False).agg({
    'name': 'first',
    'day': 'first',
    'text': ' '.join
}).drop(columns='group_id')

代码解释

  1. 创建分组标识:通过shift()对比当前行与前一行的name和day,只要有一个字段不同,就生成一个新的分组号,确保连续相同的name+day行归为同一组。
  2. 分组拼接:按生成的group_id分组,取每组的第一个name和day,拼接组内的text,最后删除临时的group_id字段,得到目标结果。

该方法采用Pandas向量化运算,效率较高,适合处理大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:55:20