[英]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.