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

如何在百万级数据集的Item3分组内创建行标识符?

问题描述

我有百万行级的如下格式数据,需要新增一列Identifier,用来标记Item3分组内的行序号。前两列仅用于说明数据集中存在其他列,之前试过cumsum和group_indices,但都达不到效果。

原始数据:

Item1Item2Item3
OneTwoA
OneTwoA
OneTwoA
OneTwoB
OneTwoB
OneTwoC

期望输出:

Item1Item2Item3Identifier
OneTwoA1
OneTwoA2
OneTwoA3
OneTwoB1
OneTwoB2
OneTwoC1

解决方案

1. Pandas处理(内存足够时)

百万行数据如果能放进内存,用groupby+cumcount是最直接高效的方式,cumcount会在每个分组内从0开始计数,加1就能得到从1开始的序号:

import pandas as pd

# 读取数据(替换成你的数据源)
df = pd.read_csv("your_data.csv")

# 新增组内行号列
df["Identifier"] = df.groupby("Item3").cumcount() + 1

2. PySpark处理(超大数据量,内存不足时)

如果数据量太大单节点内存放不下,用PySpark的窗口函数实现,能分布式处理:

from pyspark.sql import SparkSession
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

spark = SparkSession.builder.appName("group_seq").getOrCreate()

# 读取数据(替换成你的数据源)
df = spark.read.csv("your_data.csv", header=True, inferSchema=True)

# 定义窗口:按Item3分组,保持原数据顺序(如果需要指定排序字段,把orderBy里的内容换成你需要的字段,比如主键、时间戳)
window = Window.partitionBy("Item3").orderBy(df["Item1"])

# 生成组内行号
df = df.withColumn("Identifier", row_number().over(window))

# 保存结果
df.write.csv("result.csv", header=True)

为什么之前的方法没用?

  • group_indices只能给每个分组分配一个唯一的组ID,没法生成组内的行序号;
  • 单纯用cumsum是全局累计,没有分组逻辑,所以得到的是全局序号,不是组内的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:40:04