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

如何在Pandas与PostgreSQL中生成基于分组标识的组编号?

Pandas 向量化实现方案

用分组+累积求和的方式完全替代循环,效率提升明显:

myDF['group_number'] = myDF.groupby('user')['group'].apply(lambda x: (x == 'new').cumsum())

原理很简单:每个用户组内,把group列等于'new'的行标记为1,其余为0,对这些值做累积求和,就自动生成了连续的组编号——首行是1,每遇到一次'new'就递增1,'same'则保持当前编号,完全匹配需求。

PostgreSQL 实现方案

借助窗口函数的累积求和能力实现,注意SQL表本身无序,必须指定排序字段:

SELECT 
    *,
    SUM(CASE WHEN "group" = 'new' THEN 1 ELSE 0 END) OVER (
        PARTITION BY "user" 
        ORDER BY your_order_column  -- 替换为实际的行顺序字段(如时间戳、主键)
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS group_number
FROM your_table_name;

说明:

  • PARTITION BY "user" 保证每个用户单独计算组编号
  • ORDER BY 是必需的,用来确定行的处理顺序,确保分组逻辑和原数据一致
  • 累积求和会统计从当前用户第一行到当前行中'new'出现的次数,这个次数就是对应的组编号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:52:06