如何在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
相关产品推荐
相关产品推荐

