Выберите строки со значениями больше V в столбцах C - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть следующий кадр данных pandas

Index   A   B   C   D
----------------------
1       2   0   0   10
2       0   3   6   0
3       4   3   2   0
4       3   2   6   3
5       1   1   1   0

Я хочу запросить этот кадр данных, чтобы выбрать все строки, которые имеют значения больше , чем 1 (В) в больше чем 2 (C) столбца.

В этом случае выбранными строками будет индекс 3, и будет выбрано 4, так как они имеют значения больше 1, появляющиеся в более чем 2 столбцах, а именно.Индекс 3 имеет 4, 3, 2 (все больше 1), появляющиеся в A, B, C, то есть 3 столбца, и аналогично, индекс 4 имеет значения 3, 2, 6, 3 (все больше 1), появляющиеся в A, B,C и D, т.е. 4 столбца.

Ожидаемый результат

Index   A   B   C   D
----------------------
3       4   3   2   0
4       3   2   6   3

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете создать следующую маску для выбора строк:

import pandas as pd

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = (df.values > 1).sum(axis=1) > 2
print(df[mask])

Вывод

   A  B  C  D
2  4  3  2  0
3  3  2  6  3

Основная идея создания маски заключается в созданиимассив логических значений, где True означает, что значение больше 1, затем суммируйте эти значения по строкам, а если сумма больше 2, это означает, что было больше двух значений выше 1.

В качестве альтернативы выможет использовать numpy.count_nonzero для создания маски:

import pandas as pd
import numpy as np

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = np.count_nonzero(df.values > 1, axis=1) > 2
print(df[mask])

Выход

   A  B  C  D
2  4  3  2  0
3  3  2  6  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...