Фильтр Python Pandas и несколько условийPython

Программы на Python
Anonymous
Фильтр Python Pandas и несколько условий

Сообщение Anonymous »

Сейчас я анализирую данные обследования домохозяйств. Моя цель — отфильтровать респондентов, которые имеют работу (первую или вторую) в частном секторе И сообщили, сколько часов они работают в день на всех своих должностях в частном секторе. Меня не волнует, если респондент имеет вторую работу в нечастном секторе и не указал количество часов на этой работе.
Демонстрация.
В «HASAJOB» 1 означает «имеет работу», в противном случае — 0.
В «JOB1» и «JOB2» 2 означает «имеет работу в частном секторе», в противном случае — 1.
В «ЧАСЫ1» и «ЧАСЫ2» сообщают о количестве отработанных часов в день. Если 999, то о них не сообщили.

Код: Выделить всё

# import module
import pandas as pd

# assign data
survey = pd.DataFrame({'HASAJOB': [1, 1, 1, 1, 1, 1, 1, 0, 0, 0],

'JOB1': [1, 2, 2, 2, 1, 2, 2, None, None, None],

'HOURS1': [999, 8, 7, 999, 8, 6, 6, None, None, None],

'JOB2': [2, None, 2, None, None, 1, None, None, None, None],

'HOURS2': [4, None, 999, None, None, 999, None, None, None, None]
})

hasajob = survey[survey['HASAJOB'] == 1] # Fiter respondants with a job
work_in_private_sector = hasajob[(hasajob['JOB1'] == 2) | (hasajob['JOB2'] == 2)] # Filter respondants with a job in the private sector
Это фрейм данных work_in_private_sector:

Код: Выделить всё

   HASAJOB  JOB1  HOURS1  JOB2  HOURS2
0        1   1.0   999.0   2.0     4.0
1        1   2.0     8.0   NaN     NaN
2        1   2.0     7.0   2.0   999.0
3        1   2.0   999.0   NaN     NaN
5        1   2.0     6.0   1.0   999.0
6        1   2.0     6.0   NaN     NaN
Итак, я хочу исключить 2 и 3, потому что они не указали свои часы на работе в частном секторе. Я не хочу исключать пятерых, меня не волнует, не указали ли они свои часы, отработанные на работе в нечастном секторе. Таким образом, фильтр должен содержать 0, 1, 5 и 6.
Я часами думал, как это сделать, но так и не нашел.
Я попробовал первым:

Код: Выделить всё

work_in_private_sector_and_report_hours = work_in_private_sector[((hasajob['JOB1'] == 2) & (hasajob['HOURS1'] != 999)) | ((hasajob['JOB2'] == 2) & (hasajob['HOURS2'] != 999))]
И получил:

Код: Выделить всё

   HASAJOB  JOB1  HOURS1  JOB2  HOURS2
0        1   1.0   999.0   2.0     4.0
1        1   2.0     8.0   NaN     NaN
2        1   2.0     7.0   2.0   999.0
5        1   2.0     6.0   1.0   999.0
6        1   2.0     6.0   NaN     NaN
Этот метод исключает 3, но не исключает 2, поскольку они сообщили о своих часах на одной из своих должностей в частном секторе.

Подробнее здесь: https://stackoverflow.com/questions/788 ... conditions

Вернуться в «Python»