我已创建了数据框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')
答案 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.isin
与DataFrame.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.in1d
的1d 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 );
}