logo

Juliaでデータフレームを並べ替える方法 📂ジュリア

Juliaでデータフレームを並べ替える方法

コード

using DataFrames

Unit1 = DataFrame(
    member = ["다영","루다","수빈","진숙"],
    birth = [99,97,96,99],
    height = [161,157,159,162]
)

Unit2 = DataFrame(
    member = ["소정","주연","지연","현정"],
    birth = [95,98,95,94],
    height = [166,172,163,165]
)
WJSN = vcat(Unit1, Unit2)

push!(WJSN, ["다원",97,167])
push!(WJSN, ["연정",99,165])

sort(WJSN, 3)
sort(WJSN, :birth)
sort(WJSN, [:birth, :height])
sort(WJSN, :birth, rev = true)

上の例のコードを実行して、その結果を確認してみましょう。

julia> WJSN
10×3 DataFrame
 Row │ member  birth  height 
     │ String  Int64  Int64  
─────┼───────────────────────
   1 │ 다영       99     161
   2 │ 루다       97     157
   3 │ 수빈       96     159
   4 │ 진숙       99     162
   5 │ 소정       95     166
   6 │ 주연       98     172
   7 │ 지연       95     163
   8 │ 현정       94     165
   9 │ 다원       97     167
  10 │ 연정       99     165

WJSNのデータフレームは上記の通りです。

列番号でソート sort(df, cols::integer)

cols番目の列を基準にソートします。

julia> sort(WJSN, 3)
10×3 DataFrame
 Row │ member  birth  height 
     │ String  Int64  Int64  
─────┼───────────────────────
   1 │ 루다       97     157
   2 │ 수빈       96     159
   3 │ 다영       99     161
   4 │ 진숙       99     162
   5 │ 지연       95     163
   6 │ 현정       94     165
   7 │ 연정       99     165
   8 │ 소정       95     166
   9 │ 다원       97     167
  10 │ 주연       98     172

3番目の列であるheightを基準にソートされたことが確認できます。

列名でソート sort(df, cols::Symbol)

名前のシンボルcolsの列を基準にソートします。

julia> sort(WJSN, :birth)
10×3 DataFrame
 Row │ member  birth  height 
     │ String  Int64  Int64  
─────┼───────────────────────
   1 │ 현정       94     165
   2 │ 소정       95     166
   3 │ 지연       95     163
   4 │ 수빈       96     159
   5 │ 루다       97     157
   6 │ 다원       97     167
   7 │ 주연       98     172
   8 │ 다영       99     161
   9 │ 진숙       99     162
  10 │ 연정       99     165

:birthが入ってbirthを基準にソートされたことが確認できます。

ソートの優先順位 sort(df, cols::Array)

colsの順番に従って優先順位をつけてソートします。

julia> sort(WJSN, [:birth, :height])
10×3 DataFrame
 Row │ member  birth  height 
     │ String  Int64  Int64  
─────┼───────────────────────
   1 │ 현정       94     165
   2 │ 지연       95     163
   3 │ 소정       95     166
   4 │ 수빈       96     159
   5 │ 루다       97     157
   6 │ 다원       97     167
   7 │ 주연       98     172
   8 │ 다영       99     161
   9 │ 진숙       99     162
  10 │ 연정       99     165

birthでソートしつつ、heightもソートされました。ただbirthを基準にソートしただけと比較すると、2行目と3行目が逆転しています。

逆順でソート sort(df, rev::Bool=false)

rev = trueを指定すればOKです。デフォルトはfalseです。

julia> sort(WJSN, :birth, rev = true)
10×3 DataFrame
 Row │ member  birth  height 
     │ String  Int64  Int64  
─────┼───────────────────────
   1 │ 다영       99     161
   2 │ 진숙       99     162
   3 │ 연정       99     165
   4 │ 주연       98     172
   5 │ 루다       97     157
   6 │ 다원       97     167
   7 │ 수빈       96     159
   8 │ 소정       95     166
   9 │ 지연       95     163
  10 │ 현정       94     165

環境

  • OS: Windows
  • julia: v1.6.3