计算数据框中的 "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
,然后使用 eq
与 count
列值进行比较以创建布尔掩码。然后使用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
如何检查数据框中的选定列是否 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
,然后使用 eq
与 count
列值进行比较以创建布尔掩码。然后使用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 |