Условный фильтр DataFrame для логических столбцов? - PullRequest
0 голосов
/ 12 сентября 2018

Если у меня есть DataFrame следующим образом:

| id     | attribute_1 | attribute_2 |
|--------|-------------|-------------|
| 123abc | TRUE        | TRUE        |
| 123abc | TRUE        | FALSE       |
| 456def | TRUE        | FALSE       |
| 789ghi | TRUE        | TRUE        |
| 789ghi | FALSE       | FALSE       |
| 789ghi | FALSE       | FALSE       |

Как применить groupby или некоторый эквивалентный фильтр для подсчета уникального числа id элементов в подмножестве DataFrame, которое выглядитнапример:

| id     | attribute_1 | attribute_2 |
|--------|-------------|-------------|
| 123abc | TRUE        | TRUE        |
| 123abc | TRUE        | FALSE       |

То есть, я хочу получить уникальное количество id значений, где attribute_1 == True для всех экземпляров данного id НО attribute_2иметь по крайней мере 1 True.

Таким образом, 456def не будет включен в фильтр, поскольку в нем нет хотя бы одного True для attribute_2.

789ghi не будет включен в фильтрпотому что все его attribute_1 записи не True.

1 Ответ

0 голосов
/ 12 сентября 2018

Вам потребуется groupby дважды, один раз с transform('all') для "attribute_1" и второй раз с transform('any') для "attribute_2".

i = df[df.groupby('id').attribute_1.transform('all')]
j = i[i.groupby('id').attribute_2.transform('any')]

print (j)
       id  attribute_1  attribute_2
0  123abc         True         True
1  123abc         True        False

Наконец, чтобы получить уникальные идентификаторы, которые удовлетворяют этому условию, позвоните nunique:

print (j['id'].nunique())
1

Это проще всего сделать, когда ваши столбцы attribute_ * логические. Если это строки, сначала исправьте их:

df = df.replace({'TRUE': True, 'FALSE': False})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...