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

如何在pandas DataFrame中按连续Speaker分组拼接单词为句子?

解决方案

要实现按连续相同的Speaker拼接句子,不能直接用groupby('Speaker')(会把所有同Speaker的内容合并,忽略是否连续的逻辑),需要先给连续的同Speaker序列生成唯一分组标识,再进行分组拼接。

完整代码

import pandas as pd

# 构造示例数据
data = {
    'Index': [0,1,2,3,4,5,6,7,0,8,9,10,11,12,13,14,15,16,17,18,19,20],
    'Speaker': ['spk_0']*7 + ['spk_1']*9 + ['spk_0']*4 + ['spk_2']*2,
    'Word': ['can','you','see','my','screen','now','?','yes',',','now','I','can','see','your','screen','.',
             'Let','me','start','then','yes','sure']
}
df = pd.DataFrame(data)

# 1. 生成连续Speaker的分组标识:当Speaker与上一行不同时,分组号递增
df['group_id'] = df['Speaker'].ne(df['Speaker'].shift()).cumsum() - 1

# 2. 按分组标识和Speaker分组,拼接Word为句子
result = df.groupby(['group_id', 'Speaker'])['Word'].apply(' '.join).reset_index()

# 3. 调整列名和索引,匹配预期结果
result = result.rename(columns={'Word': 'Sentence'}).drop(columns='group_id')
result = result.reset_index().rename(columns={'index': 'Index'})

# 可选:给无标点结尾的句子补全句号,对齐示例结果
result['Sentence'] = result['Sentence'].apply(lambda x: x + ' .' if not x.endswith(('.', '?')) else x)

print(result)

代码说明

  1. 生成分组标识:

    • df['Speaker'].shift()获取上一行的Speaker值
    • ne()判断当前行与上一行Speaker是否不同,返回布尔值
    • cumsum()对布尔值累加(True=1,False=0),生成连续分组的唯一ID,最后减1让索引从0开始
  2. 分组拼接:

    • 按group_id和Speaker分组,确保只有连续的同Speaker会被分到一组
    • apply(' '.join)将每组的Word列用空格拼接成句子
  3. 结果调整:

    • 重命名列名、重置索引,匹配预期输出结构
    • 可选的标点补全:检查句子末尾是否有标点,没有则补充句号,和示例结果对齐

输出结果

IndexSpeakerSentence
0spk_0can you see my screen now ?
1spk_1yes , now I can see your screen .
2spk_0Let me start then .
3spk_2yes sure .

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:00