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

在Pandas DataFrame中按sente分组并生成句子列表

解决Pandas分组拼接句子的问题

这问题我熟,咱们一步步来搞定它:

首先,你的核心需求是把sente值相同的行归为一组,然后按id的顺序把value列的词语拼接成完整句子,最后组成列表。这里要注意一个细节:标点符号(比如!和.)和前面的词语之间不能有空格,直接用空格拼接会出现多余空格,得针对性处理一下。

完整代码示例

import pandas as pd

# 先还原你的示例DataFrame
df = pd.DataFrame({
    'id': [1,2,3,4,5,1,2,3,4,5],
    'pos': ['a','b','b','a','d','a','a','b','a','d'],
    'value': ['I','have','a','cat','!','My','cat','is','cute','.'],
    'sente': [21,21,21,21,21,22,22,22,22,22]
})

# 自定义拼接函数,处理标点符号的空格问题
def build_sentence(group):
    # 先按id排序,保证词语顺序和原句一致
    sorted_words = group.sort_values('id')['value'].tolist()
    sentence = ''
    for word in sorted_words:
        # 判断是否是标点符号,按需添加空格
        if word in ['!', '.', '?', ',']:
            sentence += word
        else:
            if sentence:
                sentence += ' '
            sentence += word
    return sentence

# 分组拼接并转成目标列表
final_result = df.groupby('sente').apply(build_sentence).tolist()

print(final_result)
# 输出: ["I have a cat!", "My cat is cute."]

代码细节解释

  • 分组逻辑:df.groupby('sente')把所有sente值相同的行打包成一组,确保同一句子的词语不会分散在不同组里。
  • 顺序保障:每个组内按id排序,因为id对应词语在句子中的位置序号,这样能保证拼接顺序完全符合原句的语序。
  • 智能拼接:自定义的build_sentence函数会判断当前内容是词语还是标点——词语前加空格(第一个词除外),标点直接跟在前面的内容后,完美避免了"cat !"这种多余空格的问题。
  • 格式转换:最后用.tolist()把分组后的结果转换成你需要的列表格式。

如果你的标点类型更多,只需要在if word in [...]里添加对应的符号就行,灵活性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:21