Как посчитать количество строк во фрейме данных, значения которых делятся на 3 или 5? - PullRequest
5 голосов
/ 24 сентября 2019

У меня есть фрейм данных с двумя столбцами:

 ones   zeros
0   6   13
1   8   7
2   11  7
3   8   5
4   11  5
5   10  6
6   11  6
7   7   4
8   9   4
9   4   6
10  7   5
11  6   7
12  9   10
13  14  3
14  7   7
15  7   7
16  9   7
17  7   10
18  9   5
19  12  7
20  4   8
21  6   4
22  11  5
23  9   7
24  3   10
25  7   4
26  6   12
27  9   7
28  7   4
29  9   9
... ... ...
4339    10  9
4340    7   10
4341    6   11
4342    4   6
4343    9   11
4344    5   11
4345    7   9
4346    9   5
4347    11  7
4348    9   10
4349    8   10
4350    6   5
4351    5   8
4352    5   7
4353    5   8
4354    7   13
4355    11  3
4356    6   7
4357    7   6
4358    8   12
4359    8   11
4360    7   11
4361    6   13
4362    8   3
4363    11  8
4364    9   3
4365    6   5
4366    9   6
4367    11  8
4368    4   3 

Мне не нужно подсчитывать количество строк, в которых числа в столбце ones делятся на 5 или числа в столбце zeros делятсяна 3.

Так как это подраздел проблемы.Я подготовил фрейм данных после очистки и фрейм данных, содержащий 2 столбца и 4369 строк.

Я пробовал этот, но это не решение для условия «ИЛИ», а решениедля "И"

score['count_zeros'].value_counts(dropna=False)
score['count_ones'].value_counts(dropna=False)

Мне нужно решение для условия ИЛИ

Ответы [ 2 ]

6 голосов
/ 24 сентября 2019

Сравните по модулю 5 и 3 с 0 и отфильтруйте по boolean indexing с | для побитового OR:

df = df[(df['ones'] % 5 == 0) | (df['zeros'] % 3 == 0)]
print (df)
      ones  zeros
5       10      6
6       11      6
9        4      6
13      14      3
26       6     12
29       9      9
4339    10      9
4342     4      6
4344     5     11
4345     7      9
4351     5      8
4352     5      7
4353     5      8
4355    11      3
4357     7      6
4358     8     12
4362     8      3
4364     9      3
4366     9      6
4368     4      3

При необходимостиколичество совпавших значений:

out = ((df['ones'] % 5 == 0) | (df['zeros'] % 3 == 0)).sum()
print (out)
20
2 голосов
/ 24 сентября 2019

Мы также можем использовать метод query для фильтрации в сочетании с методами панд Series.mod и eq, что означает equal:

df = df.query('ones.mod(5).eq(0) | zeros.mod(3).eq(0)')

    ones  zeros
5     10      6
6     11      6
9      4      6
13    14      3
26     6     12
29     9      9
30    10      9
33     4      6
35     5     11
36     7      9
42     5      8
43     5      7
44     5      8
46    11      3
48     7      6
49     8     12
53     8      3
55     9      3
57     9      6
59     4      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...