Подсчитайте, сколько раз каждое значение встречается в столбце pandas

import pandas as pd 

test_values = []

test_values.append(np.array([1,0,1]))
test_values.append(np.array([1,0,1]))
test_values.append(np.array([0,1,1]))

test_values

df = pd.DataFrame(test_values)

рендеринг этого кадра данных производит:

   0  1  2
0  1  0  1
1  1  0  1
2  0  1  1

Я пытаюсь подсчитать, сколько раз каждое значение встречается в столбце, поэтому для вышеуказанного фрейма данных должно быть создано следующее:

1 occurs 2, 0 occurs 0. 
0 occurs 2, 1 occurs 1. 
1 occurs 3, 0 occurs 0.

Использование .values():

for i in range(0 , df.shape[1]) : 
    print(df.iloc[:,i].value_counts().values)

производит:

[2 1]
[2 1]
[3]

Метка была удалена из каждого столбца. Как получить доступ к соответствующей метке для каждого счетчика? Так может производить:

1 occurs 2, 0 occurs 0. 
0 occurs 2, 1 occurs 1. 
1 occurs 3, 0 occurs 0.

можно попробовать использовать value_counts() для каждой колонки отдельно

cors 23.01.2019 13:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
1 448
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если ожидаются только значения 0 и 1, добавить reindex для добавления недостающих значений - переиндексировать по списку ожидаемых значений:

for i in range(0 , df.shape[1]) : 
    a = df.iloc[:,i].value_counts().reindex([0,1], fill_value=0)
    print (', '.join('{} occurs {}.'.format(k, v) for k, v in a.items()))

0 occurs 1., 1 occurs 2.
0 occurs 2., 1 occurs 1.
0 occurs 0., 1 occurs 3.

Вы можете повторить серию через pd.Series.items:

for i in range(0 , df.shape[1]):
    counts = df.iloc[:,i].value_counts()
    gen = (f'{key} occurs {value} times' for key, value in counts.items())
    print(*gen, sep=', ')

Непонятно, как вы ожидаете вывести нулевые значения, поэтому я не предполагал, что это требование. Результат дает:

1 occurs 2 times, 0 occurs 1 times
0 occurs 2 times, 1 occurs 1 times
1 occurs 3 times
Ответ принят как подходящий

Простое решение:

df.apply(pd.Series.value_counts)

Другие вопросы по теме