我试图确定Pandas列中是否有一个具有特定值的条目.我试着这样做if x in df['id'].我认为这是有效的,除非我给它一个值,我知道它不在列中,43 in df['id']它仍然返回True.当我对仅包含与缺少的id匹配的条目的数据框进行子集化时df[df['id'] == 43],显然其中没有条目.如何确定Pandas数据框中的列是否包含特定值以及为什么我的当前方法不起作用?(仅供参考,当我在这个问题的答案中使用实现时,我遇到了同样的问题).
>>> x = numpy.array([[1, 2],
... [3, 4],
... [5, 6]])
>>> [1, 7] in x
True
>>> [1, 2] in x
True
>>> [1, 6] in x
True
>>> [2, 6] in x
True
>>> [3, 6] in x
True
>>> [2, 3] in x
False
>>> [2, 1] in x
False
>>> [1, 2, 3] in x
False
>>> [1, 3, 5] in x
False
Run Code Online (Sandbox Code Playgroud)
我不知道__contains__ndarrays是如何工作的.我找的时候找不到相关的文档.它是如何工作的?它是否记录在任何地方?
np.isin我正在尝试实现更快的in版本numba,这是我到目前为止所拥有的:
import numpy as np
import numba as nb
@nb.njit(parallel=True)
def isin(a, b):
out=np.empty(a.shape[0], dtype=nb.boolean)
b = set(b)
for i in nb.prange(a.shape[0]):
if a[i] in b:
out[i]=True
else:
out[i]=False
return out
Run Code Online (Sandbox Code Playgroud)
对于数字来说它是有效的,如下例所示:
a = np.array([1,2,3,4])
b = np.array([2,4])
isin(a,b)
>>> array([False, True, False, True])
Run Code Online (Sandbox Code Playgroud)
而且它比以下更快np.isin:
a = np.random.rand(20000)
b = np.random.rand(5000)
%time isin(a,b)
CPU times: user 3.96 ms, sys: 0 ns, total: 3.96 ms
Wall time: 1.05 ms
%time np.isin(a,b)
CPU times: user 11 ms, …Run Code Online (Sandbox Code Playgroud)