gpt4 book ai didi

dataframe - Julia DataFrames 中的高效自定义排序?

转载 作者:行者123 更新时间:2023-12-04 19:41:45 28 4
gpt4 key购买 nike

是否有一种快速的方法可以为 sort 指定自定义订单?/sort!在 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 │

我想要 y:low 一起订购的列首先是 :med:high .这样做的最佳方法是什么?我知道我可以做到以下几点:
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 │

有没有办法在不分配内存的情况下做到这一点,因为在我的实际示例中, df是不是很大?

最佳答案

您可以定义一个比较函数:

lmhlt(x, y) = x == :low && y != :low || x == :med && y == :high

然后使用
sort!(df, lt=lmhlt)

但是,这仍然分配内存。不过,它应该小于您当前的版本。

关于dataframe - Julia DataFrames 中的高效自定义排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932963/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com