无法检查数组中的任何项目是否也在另一个数据帧中

时间:2018-01-29 09:06:32

标签: 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(([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')

1 个答案:

答案 0 :(得分:2)

我认为更好的是避免循环,因为速度慢。因此,对于按数组检查列,请使用tutorial

mask1 = c[0].isin(b)
print (mask1 )
0     True
1    False
2     True
3    False
Name: 0, dtype: bool

d1 = np.where(mask1, 'Great', 'sad')
print (d1)
['Great' 'sad' 'Great' 'sad']

要检查所有值,请使用Series.isinDataFrame.isin一起检查True中每行至少有一个boolean DataFrame

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

如果希望b中的c使用any使用numpy.in1d1d array将数据框的flatening值提升为mask3 = np.in1d(b, c.values.ravel()) print (mask3) [ True False True True]

 @RequestMapping(value="submitForm.html", method=RequestMethod.POST)
     public ModelAndView submitForm(@RequestParam Map<String, String> reqParam) 
       {
          String name  = reqParam.get("studentName");
          String email = reqParam.get("studentEmail");

          ModelAndView model = new ModelAndView("AdmissionSuccess");
          model.addObject("msg", "Details submitted by you::
          Name: " + name + ", Email: " + email );
       }