Pandas:检查一个 dataframe 中的行是否存在于另一个 dataframe 中


您可以使用以下语法向 pandas DataFrame 添加新列,指示每一行是否存在于另一个 DataFrame 中:

 #merge two DataFrames on specific columns
all_df = pd. merge (df1, df2, on=[' column1 ', ' column2 '], how=' left ', indicator=' exists ')

#drop unwanted columns
all_df = all_df. drop (' column3 ', axis= 1 )

#add column that shows if each row in one DataFrame exists in another
all_df[' exists '] = np. where (all_df. exists == ' both ', True , False )

以下示例展示了如何在实践中使用此语法。

示例:检查一个 Pandas DataFrame 中的行是否存在于另一个 Pandas DataFrame 中

假设我们有以下两个 panda DataFrame:

 import pandas as pd

#create first DataFrame
df1 = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E'], 
                    ' points ': [12, 15, 22, 29, 24]}) 

print (df1)

  team points
0 to 12
1 B 15
2 C 22
3 D 29
4 E 24

#create second DataFrame
df2 = pd. DataFrame ({' team ': ['A', 'D', 'F', 'G', 'H'],
                    ' points ': [12, 29, 15, 19, 10],
                    ' assists ': [4, 7, 7, 10, 12]})

print (df2)

  team points assists
0 to 12 4
1 D 29 7
2 F 15 7
3 G 19 10
4:10:12

我们可以使用以下语法将名为“exists”的列添加到第一个 DataFrame 中,以指示第二个 DataFrame 中是否存在每行中的teampoint列中的每个值:

 import numpy as np

#merge two dataFrames and add indicator column
all_df = pd. merge (df1, df2, on=[' team ', ' points '], how=' left ', indicator=' exists ')

#drop assists columns
all_df = all_df. drop (' assists ', axis= 1 )

#add column to show if each row in first DataFrame exists in second
all_df[' exists '] = np. where (all_df. exists == ' both ', True , False )

#view updated DataFrame
print (all_df)

  team points exists
0 A 12 True
1 B 15 False
2 C 22 False
3 D 29 True
4 E 24 False

新列“ exists”指示每行中“team”“points ”列中的每个值是否存在于第二个 DataFrame 中。

从结果我们可以看出:

  • 第二个 DataFrame 中存在团队值A和积分值12
  • 第二个 DataFrame 中不存在团队值B和积分值15
  • 第二个 DataFrame 中不存在团队值C和积分值22
  • 第二个 DataFrame 中存在团队值D和积分值29
  • 第二个 DataFrame 中不存在团队值E和积分值24

另请注意,您可以通过更改 NumPyWhere ()函数中的值来指定存在列中除 True 和 False 之外的值。

例如,您可以改为使用“存在”和“不存在”,如下所示:

 #add column to show if each row in first DataFrame exists in second
all_df[' exists '] = np. where (all_df. exists == ' both ', ' exists ', ' not exists ')

#view updated DataFrame
print (all_df)

  team points exists
0 to 12 exists
1 B 15 not exists
2 C 22 not exists
3 D 29 exists
4 E 24 not exists

请注意,现有列中的值已更改。

其他资源

以下教程解释了如何在 pandas 中执行其他常见任务:

Pandas:将一列从一个 DataFrame 添加到另一个 DataFrame
Pandas:获取不在另一个 DataFrame 中的行
Pandas:如何检查多列是否相等

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注