Gibt es eine schnelle Methode zum Angeben einer benutzerdefinierten Bestellung an Julia DataFrames zu sort
/sort!
?Effiziente benutzerdefinierte Reihenfolge in Julia DataFrames?
julia> using DataFrames
julia> srand(1);
julia> df = DataFrame(x = rand(10), y = rand([:high, :med, :low], 10))
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼────────────┼──────┤
│ 1 │ 0.236033 │ med │
│ 2 │ 0.346517 │ high │
│ 3 │ 0.312707 │ high │
│ 4 │ 0.00790928 │ med │
│ 5 │ 0.488613 │ med │
│ 6 │ 0.210968 │ med │
│ 7 │ 0.951916 │ low │
│ 8 │ 0.999905 │ low │
│ 9 │ 0.251662 │ high │
│ 10 │ 0.986666 │ med │
julia> sort!(df, cols=[:y])
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼────────────┼──────┤
│ 1 │ 0.346517 │ high │
│ 2 │ 0.312707 │ high │
│ 3 │ 0.251662 │ high │
│ 4 │ 0.951916 │ low │
│ 5 │ 0.999905 │ low │
│ 6 │ 0.236033 │ med │
│ 7 │ 0.00790928 │ med │
│ 8 │ 0.488613 │ med │
│ 9 │ 0.210968 │ med │
│ 10 │ 0.986666 │ med │
Ich mag würde die y
Spalte mit :low
zuerst von :med
und :high
gefolgt bestellt haben. Was wäre der beste Weg, dies zu tun? Ich weiß, ich kann folgendes tun:
julia> subdfs = []
0-element Array{Any,1}
julia> for val in [:low, :med, :high]
push!(subdfs, df[df[:y] .== val, :])
end
julia> vcat(subdfs...)
10×2 DataFrames.DataFrame
│ Row │ x │ y │
├─────┼────────────┼──────┤
│ 1 │ 0.951916 │ low │
│ 2 │ 0.999905 │ low │
│ 3 │ 0.236033 │ med │
│ 4 │ 0.00790928 │ med │
│ 5 │ 0.488613 │ med │
│ 6 │ 0.210968 │ med │
│ 7 │ 0.986666 │ med │
│ 8 │ 0.346517 │ high │
│ 9 │ 0.312707 │ high │
│ 10 │ 0.251662 │ high │
Gibt es eine Möglichkeit, dies zu tun, ohne da das Zuweisen von Speicher in meinem eigentlichen Beispiel ist df
recht groß?
Schön! Vielen Dank! Ich musste in der [docs] (http://docs.julaulang.org/en/latest/stdlib/sort/) suchen, um das 'lt' Argument hier zu verstehen. Sie sagten: "Alle sortier- und auftragsbezogenen Funktionen beruhen auf einer Beziehung" kleiner als ", die eine Gesamtordnung der zu manipulierenden Werte definiert. Die Funktion" isless "wird standardmäßig aufgerufen, aber die Beziehung kann über die 'lt 'Schlüsselwort." –