На мой взгляд, проще всего удалить 0
значения на boolean indexing
, а затем sort_values
:
s = df.isna().sum()
s = s[s != 0].sort_values(ascending=False)
Или использовать any
для фильтров только столбцов с хотя бы одним True
(один NaN
):
df1 = df.isna()
s = df1.loc[:, df1.any()].sum().sort_values(ascending=False)
Образец:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[np.nan,5,np.nan,5,5,np.nan],
'C':[7,8,9,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[np.nan,3,6,9,2,np.nan],
'F':list('aaabbb')
})
s = df.isna().sum()
s = s[s != 0].sort_values(ascending=False)
print (s)
B 3
E 2
C 1
dtype: int64