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

如何为DataFrame添加索引列并按指定列分组生成组内序号?

分组内生成连续索引的解决方案

问题描述

原始DataFrame:

+-----+
|  Cur|
+-----+
|  HKD|
|  HKD|
|  HKD|
|  USD|
|  USD|
|  USD|
|  USD|
|  INR|
|  INR|
|  INR|
+-----+

期望生成包含分组内连续索引的结果:

+-----+-----+
|  Idx|  Cur|
+-----+-----+
|    1|  HKD|
|    2|  HKD|
|    3|  HKD|
|    1|  USD|
|    2|  USD|
|    3|  USD|
|    4|  USD|
|    1|  INR|
|    2|  INR|
|    3|  INR|
+-----+-----+

尝试过.sort()、.sortlevel()、.orderBy()等方法无法实现,需要按分组生成连续序号的方案。

方案1:PySpark 实现

利用窗口函数row_number(),按Cur分组后生成从1开始的连续序号:

from pyspark.sql import Window
import pyspark.sql.functions as F

# 假设df为原始DataFrame
window = Window.partitionBy("Cur").orderBy(F.lit(1))  # 用F.lit(1)保留原分组内的行顺序
result_df = df.withColumn("Idx", F.row_number().over(window))

# 输出结果
result_df.show()

如果不需要保留原分组内的行顺序,可以将orderBy(F.lit(1))替换为实际需要排序的字段,比如orderBy("Cur")。

方案2:Pandas 实现

使用groupby()结合cumcount()方法,cumcount()默认从0开始计数,加1后得到从1开始的序号:

import pandas as pd

# 假设df为原始DataFrame
df["Idx"] = df.groupby("Cur").cumcount() + 1

# 输出结果
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:55:18