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

如何在Julia的DataFrame中获取指定列第n大的数值

Julia DataFrame获取指定列前n大数值的方法

你可以通过以下两种常用方式实现对标Python pd.Series.nlargest(n=5, keep='first') 的功能:


方法1:全排序后取前n行(适合小数据集)

先给原数据添加行号列,再按目标列降序排序后截取前n行即可,默认稳定排序会自动保留重复值的原始先后顺序,对应keep='first'效果:

using DataFrames

# 你的示例数据
df = DataFrame(
    Data1 = [0.125824, 0.612905, 0.210736, 0.172203, 0.898269],
    Data2 = [0.841358, 0.337965, 0.66849, 0.377226, 0.448477]
)

n = 3
# 第一步:添加原行号列
df = transform(df, rownumber => :原行号)
# 第二步:按Data1列降序排序,取前n行的原行号和Data1列
top_n_result = sort(df, :Data1, rev=true)[1:n, [:原行号, :Data1]]

输出结果和你预期完全一致:

3×2 DataFrame
 Row │ 原行号  Data1   
     │ Int64  Float64 
─────┼────────────────
   1 │      5  0.898269
   2 │      2  0.612905
   3 │      3  0.210736

方法2:部分排序取索引(适合大数据集,性能更高)

不需要对全量数据排序,直接用partialsortperm获取前n大值的原始索引,性能和pandas原生nlargest接近:

n = 3
# 获取Data1列前n大值的原始行索引
top_idx = partialsortperm(df.Data1, 1:n, rev=true)
# 拼接结果
top_n_result = DataFrame(
    原行号 = top_idx,
    Data1 = df.Data1[top_idx]
)

如果不需要保留原行号,只需要前n大的数值,直接执行partialsort(df.Data1, 1:n, rev=true)即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:36:03