在Pandas中如何在某些匹配条件下进行LEFT ANTI连接

在Pandas中如何在某些匹配条件下进行LEFT ANTI连接

LEFT ANTI Join与半连接相反。不包括交集,它返回左表。它只返回左表的列,不返回右表的列。

方法1:使用isin()

在创建的数据帧上,我们使用isin()函数进行左键连接和子集,以检查数据集被合并的部分是否在合并后的数据集的子集中。

语法 :DataFrame.isin(values)

参数 :

  • values:可迭代的,系列的,数据框架的或dict的

返回值 : DataFrame

示例 :

在下面的代码中,我们使用指标来寻找 “仅剩 “的行,并对合并后的数据集进行子集,然后将其分配给df1。

# importing packages
import pandas as pd
  
# anti-join
# creating dataframes using pd.DataFrame() method.
df1 = pd.DataFrame({
    "city": ["new york", "chicago", "orlando", 'mumbai'],
    "temperature": [21, 14, 35, 30],
    "humidity": [65, 68, 75, 75],
})
df2 = pd.DataFrame({
    "city": ["chicago", "new york", "orlando"],
    "humidity": [67, 60, 70]
})
  
# carrying out anti join using merge method
df3 = df1.merge(df2, on='city', how='left', indicator=True)
  
df = df3.loc[df3['_merge'] == 'left_only', 'city']
  
d = df1[df1['city'].isin(df)]
  
print(d)
Python

输出:

     city  temperature  humidity
3  mumbai           30        75
Python

方法2:使用半连接

我们可以在半连接上使用’~’运算符。它的结果是反连接。

半连接 :类似于内联,半联接返回交集,但它只返回左表的列,而不是右表的列。它没有重复的值。

语法 :

[~df1[‘column_name’].isin(df2[‘column_name’])]

其中,

  • df1 是第一个数据框架
  • df2 是第二个数据框架
  • column_name 是两个数据框架中的匹配列

示例 :

在这个例子中,我们在’city’上合并df1和df2,默认是’内联’,合并后,我们排除了df1中在df3中的部分,并打印出结果数据框。

# code
import pandas as pd
  
# inverse of semi-join:
# creating dataframes using pd.DataFrame() method.
df1 = pd.DataFrame({
    "city": ["new york", "chicago", "orlando", 'mumbai'],
    "temperature": [21, 14, 35, 30],
    "humidity": [65, 68, 75, 75],
})
df2 = pd.DataFrame({
    "city": ["chicago", "new york", "orlando"],
    "humidity": [67, 60, 70]
})
  
# carrying out anti join using merge method
df3 = df1.merge(df2, on='city')
  
df = df1[~df1['city'].isin(df3['city'])]
  
print(df)
Python

输出 :

     city  temperature  humidity
3  mumbai           30        75
Python

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册