Python Pandas – INNER JOIN和LEFT SEMI JOIN的区别
在这篇文章中,我们看到了INNER JOIN和LEFT SEMI JOIN之间的区别。
Inner Join
内联要求两个数据集的列是相同的,以便从数据表中获取共同的行数据值或数据。简单地说,并返回一个数据框或值,其中只有数据框中的那些行具有用户所期望的共同特征和行为。这类似于数学中两个集合的相交。简而言之,我们可以说在列Id上的Inner Join将从两个表中返回列,并且只有匹配的记录。
Inner Join
示例:
假设两家公司正在进行公司间的板球比赛,参加比赛的员工在数据集表中给出了他们的名字。现在在表中,我们有两个或多个类似的Id 。现在我们有两组数据表。而我们希望得到两个不同公司中具有相同ID的所有员工的数据,这样我们就可以很容易的区分不同公司中的相同ID。在这种情况下,我们将使用内联的概念来获得这些员工的所有细节。
# importing pandas as pds
import pandas as pds
# Creating dataframe for the data_set first
data_Set1 = pds.DataFrame()
# Creating data list for the table 1
# here Id 101 and 102 will be same like
# in data set 2
schema = {'Id': [101, 102, 106, 112],
'DATA 1': ['Abhilash', 'Raman', 'Pratap', 'James']}
data_Set1 = pds.DataFrame(schema)
print("Data Set-1 \n", data_Set1, "\n")
# Creating dataframe data_set second
data_Set2 = pds.DataFrame()
# Creating data list for the table 2
# here Id 101 and 102 will be same like
# in data set 1
schema = {'Id': [101, 102, 109, 208],
'DATA 2': ['Abhirav', 'Abhigyan', 'John', 'Peter']}
data_Set2 = pds.DataFrame(schema)
print("Data Set-2 \n", data_Set2, "\n")
# inner join in python
inner_join = pds.merge(data_Set1, data_Set2, on='Id', how='inner')
# display dataframe
pds.DataFrame(inner_join)
输出:
Left Semi-Join
左半联接要求两个数据集的列是相同的来获取数据,并返回左数据集的所有列数据或值,而忽略右数据集的所有列数据值。简单地说,我们可以说左半联接在列Id上将只从左表返回列,并且只从左表返回匹配记录。
Left Semi-Join
示例:
假设两家公司正在进行公司间的板球比赛,参加比赛的员工在数据集表中给出了他们的名字。现在在表中,我们有两个或多个类似的Id。现在我们有两组数据表。拥有左边数据的公司希望优先考虑自己公司的员工,这样他们就可以选择谁先上场。
# importing pandas as pds
import pandas as pds
# Creating dataframe for the data_set first
data_Set1 = pds.DataFrame()
# Creating data list for the table 1
schema = {'Id': [101, 102, 106, 112],
'DATA 1': ['Abhilash', 'Raman', 'Pratap', 'James']}
data_Set1= pds.DataFrame(schema)
print(data_Set1,"\n")
# Creating dataframe data_set second
data_Set2 = pds.DataFrame()
# Creating data list for the table 2
schema2 = {'Id': [101, 102, 109, 208],
'DATA 2': ['Abhirav', 'Abhigyan', 'John', 'Peter']}
data_Set2= pds.DataFrame(schema2)
print(data_Set2,"\n")
# setting the base for the left semi-join in python
semi=data_Set1.merge(data_Set2,on='Id')
print(semi,"\n")
data_Set1['Id'].isin(data_Set2['Id'])
semi=data_Set1.merge(data_Set2,on='Id')
# our left semi join
new_semi=data_Set1[data_Set1['Id'].isin(semi['Id'])]
pds.DataFrame(new_semi)
输出: