如何获得 Julia 数据框中的第 n 个最大值?

Aft*_*ray 3 dataframe julia

我正在寻找一种解决方案来找出我的 Julia 数据框中的第 n大数据,类似于pd.Series.nlargest(n= 5, keep='first')Python 中的 。

更详细地说,假设我有 Julia 数据框,例如;

df = DataFrame(Data1 = rand(5), Data2 = rand(5));

    Data1       Data2
    Float64     Float64
1   0.125824    0.841358
2   0.612905    0.337965
3   0.210736    0.66849
4   0.172203    0.377226
5   0.898269    0.448477
Run Code Online (Sandbox Code Playgroud)

如何从列名Data1中获取第 n 个最大值?

如果n = 3,下面是我的预期输出。

5   0.898269
2   0.612905
3   0.210736
Run Code Online (Sandbox Code Playgroud)

Bog*_*ski 5

这是一种有效的方法。首先,对数据框的行进行子集化:

\n
julia> df = DataFrame(Data1 = rand(10), Data2 = rand(10));\n\njulia> df[partialsortperm(df.Data1, 1:3, rev=true), :] # if you need a data frame with top 3 rows\n3\xc3\x972 DataFrame\n Row \xe2\x94\x82 Data1     Data2\n     \xe2\x94\x82 Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   1 \xe2\x94\x82 0.959456  0.628431\n   2 \xe2\x94\x82 0.856696  0.144034\n   3 \xe2\x94\x82 0.824744  0.996384\n\njulia> df[partialsortperm(df.Data1, 3, rev=true), :] # if you need only the 3-rd row\nDataFrameRow\n Row \xe2\x94\x82 Data1     Data2\n     \xe2\x94\x82 Float64   Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n   4 \xe2\x94\x82 0.824744  0.996384\n
Run Code Online (Sandbox Code Playgroud)\n

两种操作都很有效。该partialsort操作只需执行最少的工作即可获得所需的结果值。

\n

如果您不想获取数据框的所有行,而只想获取单列的一部分,那么以下内容就足够了:

\n
julia> partialsort(df.Data1, 1:3, rev=true) # top 3 values\n3-element view(::Vector{Float64}, 1:3) with eltype Float64:\n 0.959456038630526\n 0.856695598334831\n 0.8247444664227905\n\njulia> partialsort(df.Data1, 3, rev=true) # 3-rd value\n0.8247444664227905\n
Run Code Online (Sandbox Code Playgroud)\n