Python - Pandas Dataframe的合并Merge

本文摘要:

Pandas的merge相当于SQL的join,将不同的表按共有的列属性关联起来。
在这里插入图片描述

merge实例

现有数据 df_ratings 如下
在这里插入图片描述
df_users 如下
在这里插入图片描述
df_movies 如下
在这里插入图片描述
how=‘innder’ 内连接,表示两表都有同一UserID才会保留,否则丢弃。

import pandas as pd
df_ratings_users = pd.merge(
	df_ratings, df_users, left_on='UserID', right_on='UserID', how='inner'
)

返回结果
在这里插入图片描述

df_ratings_users_movies = pd.merge(
	df_ratings_users, df_movies, left_on='MovieID', right_on='MovieID', how='inner'
)

merge时数量关系

在这里插入图片描述
一对一关系:

# one-to-one
left = pd.DataFrame({
	'sno': [11,12,13,14],
	'name': ['name_a','name_b','name_c','name_d']
})

right = pd.DataFrame({
	'sno': [11,12,13,14],
	'age': [11,12,13,14]
})

pd.merge(left, right, on='sno')

一对多关系:
在这里插入图片描述

# one-to-many
pd.merge(left, right, on='sno')

返回结果
在这里插入图片描述
多对多关系:
在这里插入图片描述

# many-to-many
pd.merge(left, right, on='sno')

返回结果
在这里插入图片描述

left join、right join、inner join、outer join的区别

在这里插入图片描述
下面指的都是Key,交集指该Key列的值两表都存在。
Left join:保留完整的左表 和 交集
Right join:保留完整的右表 和 交集
Inner join:只保留交集
Full Outer join:全保留

下面演示一下

left = pd.DataFrame({
	'key': ['K0', 'K1', 'K2', 'K3'],
	'A': ['A0', 'A1', 'A2', 'A3'],
	'B': ['B0', 'B1', 'B2', 'B3']
})

right = pd.DataFrame({
	'key': ['K0', 'K1', 'K4', 'K5'],
	'C': ['C0', 'C1', 'C4', 'C5'],
	'D': ['D0', 'D1', 'D4', 'D5']
})

inner join:

pd.merge(left, right, how='inner')

两表共有的只有K0,K1,所以inner join只保留了这两行
在这里插入图片描述
left join:

pd.merge(left, right, how='left')

保留左表所有Key,K2、K3没有C、D列所以为NaN
在这里插入图片描述
right join:

pd.merge(left, right, how='right')

保留右表所有Key,K4、K5没有A、B列所以为NaN
在这里插入图片描述
outer join:

pd.merge(left, right, how='outer')

保留两表所有Key,没有对应的列则为NaN
在这里插入图片描述
*此文仅为个人笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值