繁体   English   中英

pandas 与多列比较,不包括索引

[英]pandas isin comparison to multiple columns, not including index

我正在尝试测试键值对字典是否包含在具有与字典同名的列的 DataFrame 中。

例子:

df1 = pd.DataFrame({'A': [2,8,4,9,6], 'B': [7,1,8,3,5], 'C': [8,4,9,1,6], 'D': [7,8,9,1,2], 'E': [3,8,4,9,6]})

df1
    
    A   B   C   D   E
0   2   7   8   7   3
1   8   1   4   8   8
2   4   8   9   9   4
3   9   3   1   1   9
4   6   5   6   2   6

d = {'A': 9, 'B': 3, 'C': 1, 'D': 1, 'E': 9}

df2 = pd.DataFrame([d])

df2

    A   B   C   D   E
0   9   3   1   1   9

我想要的是一个语句,如果 df2 中的整行值与 df1 中的任何位置匹配,则返回 True。 我试过将 d 和 df2 传递给 .isin values 参数:

df1.isin(d)

导致错误。

TypeError: only list-like or dict-like objects are allowed to be passed to DataFrame.isin(), you passed a 'int'

使用 df2 时返回所有 False。

df1.isin(df2)

    A       B       C       D       E
0   False   False   False   False   False
1   False   False   False   False   False
2   False   False   False   False   False
3   False   False   False   False   False
4   False   False   False   False   False

我玩弄了pandas.DataFrame.isin文档中的最后一个示例,并意识到我对 df2 的测试失败了,因为索引不匹配(df1 中的 3 与 df2 中的 0)。

是否有一种简单的方法可以使用忽略索引的 isin 或其他一些不涉及将五个相等测试串在一起的方法来做到这一点?

这是你期望的吗?

>>> df1.eq(df2.values).all(axis=1).any()
True

你也可以直接使用d

>>> df1.eq(d).all(axis=1).any()
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM