Pandas:获取不在另一个 dataframe 中的行


您可以使用以下基本语法从 pandas DataFrame 中获取不在另一个 DataFrame 中的行:

 #merge two DataFrames and create indicator column
df_all = df1. merge ( df2.drop_duplicates (), on=[' col1 ',' col2 '],
                   how=' left ', indicator= True )

#create DataFrame with rows that exist in first DataFrame only
df1_only = df_all[df_all[' _merge '] == ' left_only ']

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

示例:获取 Pandas DataFrame 中不在另一个 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]})

print (df2)

  team points
0 to 12
1 D 29
2 F 15
3 G 19
4:10 a.m.

我们可以使用以下语法来合并两个 DataFrame 并创建一个指示符列来指示哪些行属于每个 DataFrame:

 #merge two DataFrames and create indicator column
df_all = df1. merge ( df2.drop_duplicates (), on=[' team ',' points '],
                   how=' left ', indicator= True )

#view result
print (df_all)

然后,我们可以使用以下语法仅获取第一个 DataFrame 中不在第二个 DataFrame 中的行:

 #create DataFrame with rows that exist in first DataFrame only
df1_only = df_all[df_all[' _merge '] == ' left_only ']

#view DataFrame
print (df1_only)

  team points _merge
1 B 15 left_only
2 C 22 left_only
4 E 24 left_only

最后,如果需要,我们可以删除_merge列:

 #drop '_merge' column
df1_only = df1_only. drop (' _merge ', axis= 1 )

#view DataFrame
print (df1_only)

  team points
1 B 15
2 C 22
4 E 24

结果是一个 DataFrame,其中所有行都存在于第一个 DataFrame 中,但不存在于第二个 DataFrame 中。

其他资源

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

如何在 Pandas 中将一个 DataFrame 中的列添加到另一个 DataFrame
如何更改 Pandas 中的列顺序
如何在 Pandas 中按名称对列进行排序

添加评论

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