我正在寻找一种解决方案来找出我的 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)
这是一种有效的方法。首先,对数据框的行进行子集化:
\njulia> 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
操作只需执行最少的工作即可获得所需的结果值。
如果您不想获取数据框的所有行,而只想获取单列的一部分,那么以下内容就足够了:
\njulia> 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