Julia DataFrames ---- jion查询

1、 功能概要

  (1)标准的关联方式: inner, left, right, outer, semi, anti
(2)cross joins
  (3)复杂的关联方式,如多字段关联,条件过滤等

 

2、代码样例

2.1、标准关联方式: inner, left, right, outer, semi, anti

using DataFrames

x = DataFrame(ID=[1,2,3,4,missing], name = ["Alice", "Bob", "Conor", "Dave","Zed"])
# 5×2 DataFrame
# │ Row │ ID      │ name   │
# │     │ Int64⍰  │ String │
# ├─────┼─────────┼────────┤
# │ 1   │ 1       │ Alice  │
# │ 2   │ 2       │ Bob    │
# │ 3   │ 3       │ Conor  │
# │ 4   │ 4       │ Dave   │
# │ 5   │ missing │ Zed    │

y = DataFrame(id=[1,2,5,6,missing], age = [21,22,23,24,99])
# 5×2 DataFrame
# │ Row │ id      │ age   │
# │     │ Int64⍰  │ Int64 │
# ├─────┼─────────┼───────┤
# │ 1   │ 1       │ 21    │
# │ 2   │ 2       │ 22    │
# │ 3   │ 5       │ 23    │
# │ 4   │ 6       │ 24    │
# │ 5   │ missing │ 99    │

#默认是内连接,满足 x:ID=y:id 的数据才会展示, x,y交集。x,y的列都会展示
join(x, y, on=:ID=>:id)
# 3×3 DataFrame
# │ Row │ ID      │ name   │ age   │
# │     │ Int64⍰  │ String │ Int64 │
# ├─────┼─────────┼────────┼───────┤
# │ 1   │ 1       │ Alice  │ 21    │
# │ 2   │ 2       │ Bob    │ 22    │
# │ 3   │ missing │ Zed    │ 99    │

#左连接,以 x 连接 y, 行数与 x一致, x的全集。x,y的列都会展示
join(x, y, on=:ID=>:id, kind=:left)
# 5×3 DataFrame
# │ Row │ ID      │ name   │ age     │
# │     │ Int64⍰  │ String │ Int64⍰  │
# ├─────┼─────────┼────────┼─────────┤
# │ 1   │ 1       │ Alice  │ 21      │
# │ 2   │ 2       │ Bob    │ 22      │
# │ 3   │ 3       │ Conor  │ missing │
# │ 4   │ 4       │ Dave   │ missing │
# │ 5   │ missing │ Zed    │ 99      │

#右连接,以 y 连接 x, 行数与 y一致,y的全集。x,y的列都会展示
join(x, y, on=:ID=>:id, kind=:right)
# 5×3 DataFrame
# │ Row │ ID      │ name    │ age   │
# │     │ Int64⍰  │ String⍰ │ Int64 │
# ├─────┼─────────┼─────────┼───────┤
# │ 1   │ 1       │ Alice   │ 21    │
# │ 2   │ 2       │ Bob     │ 22    │
# │ 3   │ missing │ Zed     │ 99    │
# │ 4   │ 5       │ missing │ 23    │
# │ 5   │ 6       │ missing │ 24    │

#外连接, x,y的并集.x,y的列都会展示
join(x, y, on=:ID=>:id, kind=:outer)
# 7×3 DataFrame
# │ Row │ ID      │ name    │ age     │
# │     │ Int64⍰  │ String⍰ │ Int64⍰  │
# ├─────┼─────────┼─────────┼─────────┤
# │ 1   │ 1       │ Alice   │ 21      │
# │ 2   │ 2       │ Bob     │ 22      │
# │ 3   │ 3       │ Conor   │ missing │
# │ 4   │ 4       │ Dave    │ missing │
# │ 5   │ missing │ Zed     │ 99      │
# │ 6   │ 5       │ missing │ 23      │
# │ 7   │ 6       │ missing │ 24      │

#半连接,以 x 连接 y, x中存在,y中也存在的,但是只展示 x中的列, x的子集。
join(x, y, on=:ID=>:id, kind=:semi)
# 3×2 DataFrame
# │ Row │ ID      │ name   │
# │     │ Int64⍰  │ String │
# ├─────┼─────────┼────────┤
# │ 1   │ 1       │ Alice  │
# │ 2   │ 2       │ Bob    │
# │ 3   │ missing │ Zed    │

#反连接,以 x 连接 y, x中存在,y中不存在的, 但是只展示 x中的列, x的子集。
join(x, y, on=:ID=>:id, kind=:anti)
# 2×2 DataFrame
# │ Row │ ID     │ name   │
# │     │ Int64⍰ │ String │
# ├─────┼────────┼────────┤
# │ 1   │ 3      │ Conor  │
# │ 2   │ 4      │ Dave   │

2.2 cross 关联

#笛卡尔积的关联
join(DataFrame(x=[1,2,3]), DataFrame(y=["a","b","c"]), kind=:cross)
# 9×2 DataFrame
# │ Row │ x     │ y      │
# │     │ Int64 │ String │
# ├─────┼───────┼────────┤
# │ 1   │ 1     │ a      │
# │ 2   │ 1     │ b      │
# │ 3   │ 1     │ c      │
# │ 4   │ 2     │ a      │
# │ 5   │ 2     │ b      │
# │ 6   │ 2     │ c      │
# │ 7   │ 3     │ a      │
# │ 8   │ 3     │ b      │
# │ 9   │ 3     │ c      │

 

2.3 复杂的关联方式

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

October-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值