Давайте использовать sum
и pd.concat
:
pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)
Вывод:
count_0 count_1
a 3 2
b 4 1
c 4 1
d 1 4
e 1 4
Время
%timeit df.apply(pd.Series.value_counts).transpose().add_prefix('count_')
6,4 мс ± 278 мкс на л oop (среднее ± стандартное отклонение из 7 прогонов, 100 циклов в каждом)
%timeit df.stack().groupby(level=[1]).value_counts().unstack().add_prefix('count_')
2,78 мс ± 69,5 мкс на л oop (среднее ± стандартное .разр. из 7 прогонов, 100 циклов в каждом)
%%timeit
df_out = pd.DataFrame([
[x.strip() for x in df.columns], sum(df.values == 1), sum(df.values == 0)
]).T
df_out.columns = ['fields', 'count_1', 'count_0']
1,15 мс ± 27,4 мкс на 1 oop (среднее ± стандартное отклонение из 7 прогонов, 1000 циклов в каждом )
%timeit pd.concat([(df==0).sum().rename('count_0'), df.sum().rename('count_1')], axis=1)
1,09 мс ± 9,69 мкс на л oop (среднее ± стандартное отклонение из 7 прогонов, 1000 циклов в каждом)