赞
踩
Pandas的merge相当于SQL的join,将不同的表按共有的列属性关联起来。
现有数据 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'
)
一对一关系:
# 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')
返回结果
下面指的都是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
*此文仅为个人笔记
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。