如何检查数据框中的所有行是否与另一个数据框匹配?

4

假设你有两个具有相同列的数据框。

但是,假设数据框A有10行,数据框B有100行,但在数据框B中包含了数据框A的10行。 这10行可能不在与数据框B中的相同行数。

我们如何确定数据框A中的这些10行完全包含在数据框B中?

例如:

假设df A仅使用1行,如下所示:

A | B | C
1 | 2 | 3

而 df B 是:

A | B | C
2 | 5 | 5
3 | 2 | 7
1 | 2 | 3
5 | 1 | 5

我们如何检查df A是否包含在B中?假设行在意义上始终是唯一的,即总会存在一个唯一的A+B组合。

你能提供一个样本数据框吗?这对于可视化会非常有帮助... - user17242583
很不幸,我处理的数据是机密的,但我可以提供一个小例子。 - caasswa
只需将其全部编辑,用虚拟数据替换即可。 - user17242583
1
完成 - 给出一个简短的例子 - caasswa
2个回答

3

一个DataFrame是否是另一个DataFrame的子集:

您可以尝试使用合并然后比较的方法来解决这个问题。

如果第二个DataFrame是第一个DataFrame的超集,则它们两个的内连接结果应该与较小的DataFrame相同。

import pandas as pd

# df1 - smaller dataframe, df2 - larger dataframe

df1 = pd.DataFrame({'A ': [1], ' B ': [2], ' C': [3]})
df2 = pd.DataFrame({'A ': [2, 3, 1, 5], ' B ': [5, 2, 2, 1], ' C': [5, 7, 3, 5]})

df1.merge(df2).shape == df1.shape

True

如果存在重复值,那么先去除重复值 -
df1.merge(df2).drop_duplicates().shape == df1.drop_duplicates().shape

更多详情请查看此处


1
完美的,谢谢 :) - caasswa

0

将df2转换为字典,并使用isin进行检查:

df1.isin({key:value.array for key, value in df2.items()}).all(1).squeeze()
True

另一个选项是将两个数据框转换为 MultiIndexes,并使用isinintersection - 我怀疑这可能在计算上比第一个选项更昂贵:
A = pd.MultiIndex.from_frame(df1)

B = pd.MultiIndex.from_frame(df2)

A.isin(B).item()
True

# via intersection
A.intersection(B).empty
Out[73]: True


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接