如何在Julia中连接数据框(内部,左侧,右侧,外部,半体,反面,交叉)

时间:2019-11-18 16:58:40

标签: julia

我正在尝试找出在Julia中加入(合并)数据框的不同方法。我该如何进行这些不同类型的联接?

1 个答案:

答案 0 :(得分:1)

来自DataFrames.jl docs

  

DataFrames程序包支持七个类型的联接:

     

内部:输出包含行的键值,该行在要连接的第一个(左)和第二个(右)参数中都存在。

     

:输出中包含行的值,该行包含要连接的第一个参数(左)中存在的键的值,无论该值是否存在于第二个参数(右)中。

     

:输出包含行的值,该行包含要连接的第二个(右)参数中存在的键的值,无论该值是否存在于第一个(左)参数中。

     

外部:输出包含行的键值,该键存在于要连接的第一个(左)或第二个(右)参数中。

     

:类似于内部联接,但是输出仅限于从第一个(左)参数到联接的列。

     

:输出包含行的键值,该行存在于要连接的第一个参数(左)中,但第二个参数(右)中不存在。与半联接一样,输出仅限于第一个(左)参数的列。

     

交叉:输出是要连接的第一个(左)和第二个(右)参数的行的笛卡尔积。

julia> people = DataFrame(ID = [20, 40], Name = ["John Doe", "Jane Doe"])
2×2 DataFrame
│ Row │ ID    │ Name     │
│     │ Int64 │ String   │
├─────┼───────┼──────────┤
│ 1   │ 20    │ John Doe │
│ 2   │ 40    │ Jane Doe │

julia> jobs = DataFrame(ID = [20, 60], Job = ["Lawyer", "Astronaut"])
2×2 DataFrame
│ Row │ ID    │ Job       │
│     │ Int64 │ String    │
├─────┼───────┼───────────┤
│ 1   │ 20    │ Lawyer    │
│ 2   │ 60    │ Astronaut │

julia> join(people, jobs, on = :ID, kind = :inner)
1×3 DataFrame
│ Row │ ID    │ Name     │ Job    │
│     │ Int64 │ String   │ String │
├─────┼───────┼──────────┼────────┤
│ 1   │ 20    │ John Doe │ Lawyer │

julia> join(people, jobs, on = :ID, kind = :left)
2×3 DataFrame
│ Row │ ID    │ Name     │ Job     │
│     │ Int64 │ String   │ String⍰ │
├─────┼───────┼──────────┼─────────┤
│ 1   │ 20    │ John Doe │ Lawyer  │
│ 2   │ 40    │ Jane Doe │ missing │

julia> join(people, jobs, on = :ID, kind = :right)
2×3 DataFrame
│ Row │ ID    │ Name     │ Job       │
│     │ Int64 │ String⍰  │ String    │
├─────┼───────┼──────────┼───────────┤
│ 1   │ 20    │ John Doe │ Lawyer    │
│ 2   │ 60    │ missing  │ Astronaut │

julia> join(people, jobs, on = :ID, kind = :outer)
3×3 DataFrame
│ Row │ ID    │ Name     │ Job       │
│     │ Int64 │ String⍰  │ String⍰   │
├─────┼───────┼──────────┼───────────┤
│ 1   │ 20    │ John Doe │ Lawyer    │
│ 2   │ 40    │ Jane Doe │ missing   │
│ 3   │ 60    │ missing  │ Astronaut │

julia> join(people, jobs, on = :ID, kind = :semi)
1×2 DataFrame
│ Row │ ID    │ Name     │
│     │ Int64 │ String   │
├─────┼───────┼──────────┤
│ 1   │ 20    │ John Doe │

julia> join(people, jobs, on = :ID, kind = :anti)
1×2 DataFrame
│ Row │ ID    │ Name     │
│     │ Int64 │ String   │
├─────┼───────┼──────────┤
│ 1   │ 40    │ Jane Doe │