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

如何在Pandas中使用apply函数返回多行,合并同日期对话记录?

解决方法:用Pandas的apply返回多行实现多日期对话合并

嘿,这个场景我太熟悉了!其实用apply返回多行的关键就是让你的自定义函数返回一个DataFrame而不是单个值或Series——Pandas会自动把每个分组返回的小DataFrame拼接成最终的结果。我给你一步步演示怎么实现:

1. 先准备示例数据

首先咱们模拟一个符合你场景的DataFrame,方便后续测试:

import pandas as pd
from datetime import datetime

# 模拟对话数据:同一ID在多日期有多条记录
data = {
    'id': [1, 1, 1, 2, 2],
    'content': ['你好', '请问怎么用Pandas合并对话?', '谢谢解答!', '我也有问题', '求指导'],
    'timestamp': [
        datetime(2024, 5, 1, 10, 30),
        datetime(2024, 5, 1, 10, 35),
        datetime(2024, 5, 2, 14, 20),
        datetime(2024, 5, 1, 9, 15),
        datetime(2024, 5, 2, 11, 0)
    ]
}
df = pd.DataFrame(data)

2. 提取日期列(用于分组)

先从时间戳里提取纯日期,这样方便按「ID+日期」分组:

df['date'] = df['timestamp'].dt.date

3. 定义返回DataFrame的apply函数

核心就在这里:写一个函数,接收每个分组(同一ID+同一日期的所有对话),合并内容后返回一个包含结果的小DataFrame:

def merge_daily_chats(group):
    # 先按时间戳排序对话,保证合并顺序正确
    sorted_group = group.sort_values('timestamp')
    # 用换行符合并对话内容,你也可以换成其他分隔符比如「|」
    merged_content = '\n'.join(sorted_group['content'])
    # 返回一个包含合并后数据的DataFrame
    return pd.DataFrame({
        'id': [group['id'].iloc[0]],
        'date': [group['date'].iloc[0]],
        'merged_content': [merged_content],
        'first_msg_time': [sorted_group['timestamp'].iloc[0]],
        'last_msg_time': [sorted_group['timestamp'].iloc[-1]]
    })

4. 分组+apply得到最终结果

按「ID+日期」分组后,调用上面的函数,Pandas会自动把所有分组的结果拼接成多行的DataFrame:

# group_keys=False避免生成多余的分组索引
result_df = df.groupby(['id', 'date'], group_keys=False).apply(merge_daily_chats)

运行后result_df就是你要的结果:每个ID的每个日期对应一行合并后的对话,完美支持多日期场景!

为什么这样能返回多行?

当你的apply函数返回DataFrame时,Pandas会把每个分组返回的小DataFrame按行拼接,最终生成一个包含所有分组结果的大DataFrame——这就是实现返回多行的核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:28:30