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

如何在Julia中为分组后的子DataFrame生成行序号

Julia DataFrame分组生成组内递增序号解决方法

你当前代码里用nrow => :seq只会返回每个分组的总行数,所以每个组的所有行seq值相同(你这里显示全为1,说明每个分组仅包含1行)。要实现组内行从1开始递增的序号,需针对每个分组的子DataFrame生成连续索引序列,以下是两种可行方案:

方案一:使用transform保留原数据结构

transform会保留原DataFrame的所有行,直接添加新的seq列,适合需要保留全量数据的场景:

# 先分组,再为每个组生成从1开始的序号
currentDF = transform(groupby(currentDF, [:TOID, :Lane, :SectionLabel, :Chainage]), 
                      _ -> 1:nrow(_) => :seq)

# 如果需要先对组内数据排序,再生成序号:
currentDF = transform(groupby(currentDF, [:TOID, :Lane, :SectionLabel, :Chainage])) do sdf
    sorted_sdf = sort(sdf, [:TOID, :Lane, :SectionLabel, :Chainage])
    sorted_sdf.seq = 1:nrow(sorted_sdf)
    return sorted_sdf
end

方案二:使用combine自定义处理逻辑

如果需要对分组数据做更多自定义操作,可在combine的匿名函数里完成排序和序号生成:

grouped_currentDF = combine(groupby(currentDF, [:TOID, :Lane, :SectionLabel, :Chainage])) do sdf
    # 先对组内数据排序
    sorted_sdf = sort(sdf, [:TOID, :Lane, :SectionLabel, :Chainage])
    # 添加seq列,赋值为1到组内行数的序列
    sorted_sdf[!, :seq] = 1:nrow(sorted_sdf)
    return sorted_sdf
end

# 提取需要的列
extract = select(grouped_currentDF, [:seq, :TOID, :Lane, :SectionLabel, :Chainage])

核心逻辑是:针对每个分组的子DataFrame,生成1:nrow(sdf)这样的连续整数序列,将其赋值给seq列,就能实现每个组内序号从1开始递增的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:46:03