计算数据框中的 "True" 个值

count the "True" values in dataframe

如何检查数据框中的选定列是否 return True 以及如何比较 True 值的计数使用列名 count 处理 NOT NULL.

的单元格数量

WHERE 这些选定列的值可以为 False。

为此,我使用了以下语句,但我不知道如何将它与列 count

进行比较
df=pd.DataFrame({'dept':['dept1','dept2','dept3','dept4','dept5'],
                 'subd':['hndf','nbf','asx','qwe','def'],
                 'jju':['0','1','1','NA','1'],
                 'rob':['1','0','NA','1','1'],
                 'ans':['0','0','1','NA','1'],
                 'zsd':['1','NA','1','1','1'],
                 'count':['4','3','3','2','4']}


        dept    subd      jju     rob  ans  zsd count
0      dept1    hndf       0      1     0      1    4
1      dept2     nbf       1      0     0      NA   3
2      dept3     asx       1      NA    1      1    3
3      dept4     qwe       NA     1    NA      1    2
4      dept5     def       1      1    1       1    4 



df = df[df.loc[:,'jju':'zsd'].eq("1")]

如何从这里继续???

预期结果:

0      dept3     asx       1      NA    1      1    3
1      dept4     qwe       NA     1    NA      1    2
2      dept5     def       1      1    1       1    4 

您可以将 "NA" 替换为 NaN 值,然后在轴上替换 sum,然后使用 eqcount 列值进行比较以创建布尔掩码。然后使用mask过滤df:

msk = df['count'].astype(int).eq(df.loc[:, 'jju':'zsd'].replace('NA', float('nan')).astype(float).eq(1).sum(axis=1))
out = df[msk]

输出:

    dept subd jju rob ans zsd count
2  dept3  asx   1  NA   1   1     3
3  dept4  qwe  NA   1  NA   1     2
4  dept5  def   1   1   1   1     4

这样就可以了,

df.replace("NA", np.nan, inplace = True)
df.iloc[:, 2:] = df.iloc[:, 2:].apply(pd.to_numeric, errors = "coerce", axis = 1)

输出-

dept subd jju rob ans zsd count
0 dept1 hndf 0.0 1.0 0.0 1.0 4.0
1 dept2 nbf 1.0 0.0 0.0 nan 3.0
2 dept3 asx 1.0 nan 1.0 1.0 3.0
3 dept4 qwe nan 1.0 nan 1.0 2.0
4 dept5 def 1.0 1.0 1.0 1.0 4.0