Подсчет количества нулей в строке по Pandas DataFrame?
учитывая фрейм данных, я хотел бы вычислить количество нулей на каждую строку. Как я могу вычислить его с пандами?
в настоящее время это то, что я сделал, это возвращает индексы нулей
def is_blank(x):
return x == 0
indexer = train_df.applymap(is_blank)
2 ответов
используйте логическое сравнение, которое приведет к логическому df, мы можем затем привести это к int, True становится 1, False становится 0, а затем вызвать count
и передать параметр axis=1
для подсчета строк:
In [56]:
df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]})
df
Out[56]:
a b c
0 1 0 0
1 0 0 0
2 0 1 0
3 1 0 0
4 3 1 0
In [64]:
(df == 0).astype(int).sum(axis=1)
Out[64]:
0 2
1 3
2 2
3 2
4 1
dtype: int64
нарушая сверху вниз:
In [65]:
(df == 0)
Out[65]:
a b c
0 False True True
1 True True True
2 True False True
3 False True True
4 False False True
In [66]:
(df == 0).astype(int)
Out[66]:
a b c
0 0 1 1
1 1 1 1
2 1 0 1
3 0 1 1
4 0 0 1
редактировать
как указал Дэвид astype
to int
является ненужным, как Boolean
типы будут upcasted до int
при вызове sum
таким образом, это упрощает кому:
(df == 0).sum(axis=1)
вот еще одно решение с использованием apply()
и value_counts()
.
df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]})
df.apply( lambda s : s.value_counts().get(0,0), axis=1)