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

Pyspark如何为event列值相同的行分配相同ID且保留原行顺序?

解决方案

以下是不同场景下的实现方法,均满足同event对应唯一id、保留原始行顺序的要求:

SQL 实现

优先用窗口函数实现,不需要修改原表即可查询到目标结果:

SELECT 
  DENSE_RANK() OVER(ORDER BY MIN(id) OVER (PARTITION BY event)) AS new_id,
  event
FROM your_table;

如果需要修改原表存储结果,先新增字段再更新即可:

-- 新增存储新id的列
ALTER TABLE your_table ADD COLUMN new_id INT;

-- 给新列赋值
UPDATE your_table t1
SET new_id = (
  SELECT DENSE_RANK() OVER(ORDER BY MIN(t2.id))
  FROM your_table t2
  WHERE t2.event = t1.event
  GROUP BY t2.event
);

上述逻辑会按照event第一次出现的顺序分配连续的唯一id,不受event本身的字符排序规则影响。

Python Pandas 实现

处理内存中的数据集时,用factorize方法一行代码即可实现:

import pandas as pd

# df 为你的原始数据集对象
df["new_id"] = pd.factorize(df["event"], sort=False)[0] + 1

sort=False参数保证按event首次出现的顺序分配id,不会打乱原始行的排列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:24:04