我正在尝试找出在Julia中加入(合并)数据框的不同方法。我该如何进行这些不同类型的联接?
答案 0 :(得分:1)
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 │