如何在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
相关产品推荐
相关产品推荐

