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

Python Pandas实现按组拼接文本并计算跨组行时间差值的问题

解决思路:结合分隔点时间计算组间差值

你已经用cumsum()标记分组的思路非常正确,接下来只需要把分隔点的时间和每个内容组关联起来,就能计算出时间差了。这里的分隔点包括你定义的空格,以及最后一行的空值(因为它是bag组的结束标记)。

完整实现代码

import pandas as pd
import numpy as np

# 初始化你的原始数据
sample = pd.DataFrame({'time':[1,2,4,6,7,8,9,12,15],'text':[' ','r','e','d',' ','b','a','g','']})

# 1. 标记所有分隔行:空格或空字符串都作为分组分隔点
sample['is_sep'] = sample['text'].isin([' ', ''])

# 2. 用分隔行的累积计数生成内容组的ID
# 每个内容组的ID等于它前面出现的分隔行总数
sample['group_id'] = sample['is_sep'].cumsum()

# 3. 提取所有分隔行的时间,同时生成每个分隔点对应的下一个分隔点时间
sep_times = sample[sample['is_sep']][['group_id', 'time']].rename(columns={'time': 'start_time'})
# 把下一个分隔点的时间作为当前组的结束时间
sep_times['end_time'] = sep_times['start_time'].shift(-1)

# 4. 对内容组进行文本拼接
joined_texts = sample[~sample['is_sep']].groupby('group_id')['text'].apply(''.join).reset_index(name='joined_text')

# 5. 合并拼接结果和分隔时间,计算时间差
result = joined_texts.merge(sep_times, on='group_id')
result['time_difference'] = result['end_time'] - result['start_time']

# 6. 整理成你需要的最终格式(可选:把浮点型转成整数)
result = result[['joined_text', 'time_difference']].astype({'time_difference': int})

print(result)

输出结果

joined_text  time_difference
0         red                6
1         bag                8

关键步骤解释

  • 标记分隔行:把空格和空字符串都标记为分隔点,确保最后一个组bag能对应到结束时间15。
  • 关联分隔时间:通过shift(-1)把下一个分隔点的时间作为当前组的结束时间,这样直接相减就能得到组的时间跨度。
  • 过滤内容行:分组拼接时排除分隔行,避免把空格或空值拼进结果里。

这样就完美实现了你想要的文本拼接+时间差计算的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:13:12