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

如何使用Pandas对聊天会话数据集按用户分组并按message_id排序

实现方法

要实现按会话分组再按时序排序,核心是生成一个不区分收发方向的会话对标识,让两个用户之间的所有消息都归属到同一个分组下,再利用全局自增的message_id做组内排序就能还原对话顺序。

完整代码示例

import pandas as pd

# 1. 构造示例数据集(如果是从文件读取可以用pd.read_csv等方法)
raw_data = [
    [123, 'al', 'sal', 'hi'],
    [871, 'al', 'hal', 'hey'],
    [989, 'al', 'bob', 'me too'],
    [900, 'sal', 'sal', 'hello'],
    [107, 'bob', 'al', "i'm bob"],
    [242, 'sal', 'al', 'how are you?'],
    [101, 'al', 'bob', "hi, i'm al"],
    [898, 'sal', 'al', "i'm good"]
]
df = pd.DataFrame(raw_data, columns=['message_id', 'to_user', 'from_user', 'message'])

# 2. 生成会话对标识:将收发方排序后组成元组,确保同一会话的标识唯一
df['chat_pair'] = df.apply(lambda row: tuple(sorted([row['to_user'], row['from_user']])), axis=1)

# 可选:过滤掉单条无交互的会话、自己给自己发的消息
# 过滤单条会话:df = df.groupby('chat_pair').filter(lambda x: len(x) > 1)
# 过滤自发消息:df = df[df['to_user'] != df['from_user']]

# 3. 排序:先按会话对分组,组内按message_id升序还原时序
df_sorted = df.sort_values(by=['chat_pair', 'message_id']).reset_index(drop=True)

# 4. 删除辅助列,得到最终结果
df_sorted = df_sorted.drop(columns=['chat_pair'])
print(df_sorted)

逻辑说明

  • 会话对标识用sorted处理是为了消除收发方向的差异,比如al→bob和bob→al排序后得到的元组都是('al', 'bob'),自然会被分到同一组
  • message_id是数据库全局索引,id越小代表消息发送时间越早,组内按id升序就能完全还原真实的对话先后顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:07