Подсчет нескольких значений кадра данных во всех столбцах - PullRequest
0 голосов
/ 09 ноября 2018

Как я могу подсчитать вхождения нескольких значений во всем фрейме данных? Есть ли способ добиться без цикла for?

Ex = считать все 0 и -1 во всех столбцах фрейма данных

Я думал что-то вроде df.apply.count (0, -1)

Спасибо!

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Вы можете попробовать это:

(df == 0).sum(axis=1).sum()

Это будет считать количество нулей во всех столбцах кадра.

0 голосов
/ 09 ноября 2018

Простое использование melt с value_counts

df.melt().value.value_counts()

или

np.unique(a.values.ravel(),return_counts=True)
Out[292]: (array([1, 2, 3, 5], dtype=int64), array([3, 1, 1, 1], dtype=int64))
0 голосов
/ 09 ноября 2018

Настройка

np.random.seed([3, 1415])

df = pd.DataFrame(
    np.random.choice(range(-2, 3), size=(10, 10)),
    columns=[*'abcdefghij']
)

df

   a  b  c  d  e  f  g  h  i  j
0 -2  1  0  1  0  0  1  0  1 -2
1  0 -2 -2  2 -2  0  0 -2  2 -1
2  1  0  2  2  2  2  1  1  1  2
3  1 -1  1 -2  2  2  0  0 -2  0
4  2 -2  2 -1  2  2  0  0 -2  0
5  2  1 -1  2  0  2  0  1  2  1
6 -2  1  1 -1 -2 -2  2  1 -2  2
7 -1  1  2  0  2 -2 -2  0 -2  2
8  2  1 -2  1 -1 -1  2  1  2  1
9 -1  1  2 -2  1  0 -2 -2  1 -1

numpy.in1d

Это должно быть очень быстро

np.in1d(df.values, [0, -1]).sum()

29

@ SandeepKadapa

производительность, аналогичная np.in1d(df.values, [0, -1]).sum()

np.isin(df.values.ravel(),[0,-1]).sum()

29

numpy.in1d с np.count_nonzero

Это должно быть очень быстро (э-э)

np.count_nonzero(np.in1d(df.values, [0, -1]))

29

applymap + set.__contain__ + numpy.sum

Это немного нахально

df.applymap({0, -1}.__contains__).values.sum()

29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...