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.






Если ожидаются только значения 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)
можно попробовать использовать
value_counts()для каждой колонки отдельно