检查pandas数据框是否为其他数据框的子集


问题内容

我有两个Python Pandas数据框A,B,它们具有相同的列(显然具有不同的数据)。我要检查A是B的子集,即A的所有行都包含在B中。

知道怎么做吗?


问题答案:

方法DataFrame.merge(another_DF)在列的默认交集合并(使用来自两个话语结构相同名称的所有列),并使用how='inner'-因此,我们期望有行相同#后inner join(如果没有的话语结构有重复):

len(A.merge(B)) == len(A)

PS,如果其中一个DF有重复的行,它将无法正常工作-有关此类情况,请参见下文

演示:

In [128]: A
Out[128]:
   A  B  C
0  1  2  3
1  4  5  6

In [129]: B
Out[129]:
   A  B  C
0  4  5  6
1  1  2  3
2  9  8  7

In [130]: len(A.merge(B)) == len(A)
Out[130]: True

对于包含重复项的数据集,我们可以删除重复项并使用相同的方法:

In [136]: A
Out[136]:
   A  B  C
0  1  2  3
1  4  5  6
2  1  2  3

In [137]: B
Out[137]:
   A  B  C
0  4  5  6
1  1  2  3
2  9  8  7
3  4  5  6

In [138]: A.merge(B).drop_duplicates()
Out[138]:
   A  B  C
0  1  2  3
2  4  5  6

In [139]: len(A.merge(B).drop_duplicates()) == len(A.drop_duplicates())
Out[139]: True