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

如何高效合并Pandas DataFrame中同会话内连续用户的文本行

高效合并同会话内连续用户的文本内容

问题场景

现有如下Pandas DataFrame,包含会话ID、用户和文本三列:

import pandas as pd
data = [[1, "User1", "Hello."], [1, "User1", "How are you?"], [1, "User2", "I'm fine."], [2, "User1", "Nice to meet you."], [2, "User2", "Hello."], [2, "User2", "I'm happy."], [2, "User2", "Goodbye."], [3, "User2", "Hello."]]
df = pd.DataFrame(data, columns=['Conversation', 'User', 'Text'])

对应的DataFrame内容:

Conversation   User              Text
0             1  User1             Hello.
1             1  User1      How are you?
2             1  User2         I'm fine.
3             2  User1  Nice to meet you.
4             2  User2             Hello.
5             2  User2         I'm happy.
6             2  User2           Goodbye.
7             3  User2             Hello.

需求:不跨越会话边界,合并同一会话内连续同一用户的文本(用空格拼接),新会话开始时重新独立处理,期望结果如下:

Conversation   User              Text
0             1  User1             Hello. How are you?
2             1  User2         I'm fine.
3             2  User1  Nice to meet you.
4             2  User2             Hello. I'm happy. Goodbye.
7             3  User2             Hello.

高效实现方案

针对大数据量场景,推荐使用Pandas的向量化分组+聚合操作,避免循环,保证处理效率:

# 1. 生成连续分组标识:当会话或用户发生变化时,标记为新分组
df['group_id'] = df[['Conversation', 'User']].ne(df[['Conversation', 'User']].shift()).any(axis=1).cumsum()

# 2. 按会话和分组标识聚合,拼接文本
result = df.groupby(['Conversation', 'group_id', 'User'], as_index=False)['Text'].agg(' '.join)

# 3. 还原原DataFrame的起始索引(可选,匹配示例结果索引)
result.index = df.groupby(['Conversation', 'group_id']).head(1).index

# 4. 移除临时分组列
result = result.drop('group_id', axis=1)

print(result)

代码说明

  • 步骤1通过向量化对比生成分组ID:对比当前行与上一行的会话、用户是否不同,只要有一个维度变化就标记为新分组,再通过累加得到唯一的分组标识,确保同会话内连续相同用户属于同一组。
  • 步骤2的groupby+agg是Pandas底层优化的聚合操作,基于C实现,处理百万级数据仍能保持高效。
  • 步骤3可选,用于还原原DataFrame中每组的起始行索引,和示例结果的索引完全匹配;若不需要保留原索引,可直接跳过。

输出结果

运行代码后将得到与需求完全一致的结果:

Conversation   User                          Text
0             1  User1             Hello. How are you?
2             1  User2                     I'm fine.
3             2  User1              Nice to meet you.
4             2  User2  Hello. I'm happy. Goodbye.
7             3  User2                     Hello.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:35:34