有没有一种方法可以针对单个值检查数据帧?

时间:2020-07-09 15:01:41

标签: python pandas

我有一个像这样的数据框。

import pandas as pd 
import numpy as np
  
# Creating a dict of lists  
data = {'Name':["Akash", "Geeku", "Pankaj", "Sumitra","Ramlal"], 
       'Branch':["B.Tech", np.nan, "BCA", "B.Tech", "BCA"], 
       'Score':["80","90","60", "30", "B.Tech"], 
       'Result': ["Pass","Pass","Pass","Fail","Fail"]} 
  
# creating a dataframe  
df = pd.DataFrame(data)  
df 

df1:

enter image description here

然后,我想检查数据框是否与df中任何位置的“ B.Tech”值相对应。并在下面返回一些类似的df。

df2:

enter image description here

然后我要获取一个列表,其中的值将基于前4个布尔值,例如如果前4列中的任何值包含一个+ True,则新列将为True,否则为False

对于这种情况,我想要的结果是 [True,False,False,False,True]

对不起,我是熊猫的新手,我想知道熊猫是否提供了一种有效的方法。

1 个答案:

答案 0 :(得分:2)

这将一劳永逸:

(df == "B.Tech").sum(axis=1).astype(bool)

说明:

df == "B.Tech"返回一个与原始形状相同的DataFrame,但只包含True / False值(该值是否等于“ B.Tech”)

.sum(axis=1)按行对布尔值求和,将True解释为1,将False解释为0。

.astype(bool)将总和的结果转换回布尔值,其中大于0的值变为True,而0则变为False。

更新:

或者如Ch3steR所指出的,您可以用any替换最后一部分,如:

(df == "B.Tech").any(axis=1)