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

如何在Pandas中按id聚合压缩DataFrame数据

解决方案

可以通过Pandas的groupby结合聚合逻辑实现需求,具体操作如下:

  1. 先构建示例DataFrame用于验证:
import pandas as pd

df = pd.DataFrame({
    'id': ['a', 'a', 'a', 'e'],
    'start_time': ['b', 'b', 'f', 'h'],
    'channel': ['c', 'd', 'g', 'i']
})
  1. 分组并执行聚合:
    我们需要对start_time做去重后转列表(单元素时直接返回值),对channel直接收集所有值转列表(单元素时直接返回值),可以用自定义函数或lambda表达式实现:

方式一:自定义聚合函数

def agg_unique_list(x):
    unique_vals = list(pd.unique(x))
    return unique_vals if len(unique_vals) > 1 else unique_vals[0]

def agg_plain_list(x):
    val_list = list(x)
    return val_list if len(val_list) > 1 else val_list[0]

result = df.groupby('id').agg({
    'start_time': agg_unique_list,
    'channel': agg_plain_list
}).reset_index()

方式二:简洁lambda表达式

result = df.groupby('id').agg({
    'start_time': lambda x: list(pd.unique(x)) if len(pd.unique(x))>1 else pd.unique(x)[0],
    'channel': lambda x: list(x) if len(x)>1 else x.iloc[0]
}).reset_index()

执行后得到的result就是目标格式:

idstart_timechannel
a['b', 'f']['c', 'd', 'g']
ehi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:20:29