df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
Вы также можете сделать это в 2 шага с помощью комбинации функций melt и pivot_table:
использовать функцию плавления для переформатирования формы информационного кадра
cols=['NO','CO']
df_melt=pd.melt(df,id_vars=['ST'],value_vars=cols)
А затем с помощью сводной таблицы создайте новый фрейм данных и подсчитайте значения
df_pivot=pd.pivot_table(df_melt,index=['ST','variable'],values='value',aggfunc='count').reset_index()
Result:
ST variable value
0 A CO 1
1 A NO 2
2 B CO 2
3 B NO 2
4 C CO 1
5 C NO 1