【发布时间】:2020-06-23 22:57:41
【问题描述】:
我有一个大的 df (df1),每列中有二进制输出,如下所示:
df1:
a b c d
1 1 0 1 0
2 0 0 0 0
3 0 1 0 1
4 1 1 0 0
5 1 0 0 0
6 1 0 1 1
...
我还有另一个较小的 df (df2) 带有一些“模板”行,我想检查 df1s 行是否包含。模板如下所示:
df2:
a b c d
1 1 0 1 0
2 1 1 1 1
3 0 0 0 1
4 1 1 0 0
我要做的是有效地在大 df 中搜索这些少量模板,因此在此示例中,第 1、3、4、6 行将匹配,但 2 和 5 将不匹配。我希望大 df 中有任何额外的 1 的行通过测试(即,有一个模板行,但该行中也有一些额外的 1)。
我知道我可以只使用一个嵌套循环并遍历大小 dfs 的所有行并将行匹配为 np.arrays,但这似乎是一种非常低效的方法。我想知道这个问题是否有任何基于非迭代 pd 的解决方案?
非常感谢!
次要功能编辑:除了搜索和匹配之外,我还尝试保留 df1 中的每一行匹配的 df2 中哪个模板行的列表,以便我可以统计大 df 中显示的模板数量和他们是哪些。这是这个答案(Compare Python Pandas DataFrames for matching rows)不起作用的原因之一。
【问题讨论】:
-
@Chris,不完全是因为我还想知道显示哪个模板以及显示频率。我还想保留 包含 模板但也有额外 1 的行...
-
您能否分享示例数据框以及您迄今为止尝试过的最少代码?