Python Can';t检查数组中的任何项是否也在另一个数据帧中
我已经创建了一个数据帧Python Can';t检查数组中的任何项是否也在另一个数据帧中,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我已经创建了一个数据帧c和数组b。我已经成功地检查了c第一列中的任何数字是否也在b中 a = np.array([ [2.,1.,1.], [3.,4.,1.], [5.,6.,1.], [7.,8.,1.]]) c = pd.DataFrame(data=a, dtype = 'float64') b = np.array(([
c
和数组b
。我已经成功地检查了c
第一列中的任何数字是否也在b
中
a = np.array([
[2.,1.,1.],
[3.,4.,1.],
[5.,6.,1.],
[7.,8.,1.]])
c = pd.DataFrame(data=a,
dtype = 'float64')
b = np.array(([1, 10, 5, 2]), dtype = 'float64')
for i in range(len(c)):
if c.iloc[i,0] in b:
print ("Great")
else:
print ('sad')
输出:
Great
sad
Great
sad
但是,当检查b中的任何项是否在c数据帧中时,以下命令不起作用。为什么呢
for i in range(len(b)):
if b[i,0] in c:
print ('hola')
else:
print ('False')
我认为最好是避免循环,因为速度慢。因此,对于按数组检查列,请使用: 对于检查所有值,请使用for检查
布尔数据帧中的每行是否至少有一个True
:
mask2 = c.isin(b).any(axis=1)
print (mask2)
0 True
1 True
2 True
3 True
dtype: bool
e1 = np.where(mask2, 'hola', 'False')
print (e1)
['hola' 'hola' 'hola' 'hola']
详情:
print (c.isin(b))
0 1 2
0 True True True
1 False False True
2 True False True
3 False False True
如果要检查c
中的b
,请通过以下方式将数据帧的平展值用于1d数组
:
但是如何使用反之亦然的逻辑进行检查,即“b”是否在任何“c”中?谢谢!非常有用。有没有可能把它放到IF/Else语句中?我试图根据结果更新np.zeros中的值…不确定是否理解。你能再解释一下吗?因为在numpy/pandas
中用于if else
使用numpy.where
,但不确定您需要什么;)基本上,我有一个带有客户ID的主列表c(dataframe)和另一个也包含客户ID的子集列表b(float64)。我想创建一个新列或一个单独的表,如果客户同时在列表a和b中,那么它将更新为1,否则为0。然后需要c['flag']=c['ID']。isin(b)。astype(int)
?如果需要,用数组b
检查列id
。
print (c.isin(b))
0 1 2
0 True True True
1 False False True
2 True False True
3 False False True
mask3 = np.in1d(b, c.values.ravel())
print (mask3)
[ True False True True]