代码之家  ›  专栏  ›  技术社区  ›  Andrew Bannerman

数组的dataframes.jl左连接等价项

  •  0
  • Andrew Bannerman  · 技术社区  · 6 年前

    是否有这样一个包可以左连接数组,就像dataframes.jl如何左连接dataframes一样?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bill Antonello    6 年前

    如果数组中有复杂的记录,最好使用dataframes.jl。将数组放入数据帧中,然后连接,然后使用数组构造函数提取。

    如果您确切地知道左连接的逻辑将始终是什么,那么您应该能够有效地使用列表理解。不过,在通用左连接的逻辑级别上,最好使用数据帧。

    julia> using DataFrames
    julia> names = DataFrame(ID = [20, 40], Name = ["John Doe", "Jane Doe"])
    2×2 DataFrames.DataFrame
    │ Row │ ID │ Name     │
    ├─────┼────┼──────────┤
    │ 1   │ 20 │ John Doe │
    │ 2   │ 40 │ Jane Doe │
    
    julia> jobs = DataFrame(ID = [20, 40], Job = ["Lawyer", "Doctor"])
    2×2 DataFrames.DataFrame
    │ Row │ ID │ Job    │
    ├─────┼────┼────────┤
    │ 1   │ 20 │ Lawyer │
    │ 2   │ 40 │ Doctor │
    
    julia> arr = Array(join(names, jobs, on = :ID, kind = :left))
    2×3 Array{Any,2}:
    20  "John Doe"  "Lawyer"
    40  "Jane Doe"  "Doctor"
    

    …或

    julia> n = Array(names)
    2×2 Array{Any,2}:
    20  "John Doe"
    40  "Jane Doe"
    
    julia> j = Array(jobs)
    2×2 Array{Any,2}:
    20  "Lawyer"
    40  "Doctor"
    
    julia> [ [n[i,2], j[i,2]] for i in 1:size(n)[1] if n[i,1] == j[i,1]]
    2-element Array{Array{String,1},1}:
    String["John Doe", "Lawyer"]
    String["Jane Doe", "Doctor"]