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
相关产品推荐
相关产品推荐

