Условное отбрасывание строк, если обе переменные равны NULL - PullRequest
0 голосов
/ 18 июня 2020

Простой вопрос от Python новичка.

У меня есть фрейм данных с 15+ переменными и тысячами записей. Я хочу удалить записи из этого фрейма данных, когда ОБЕ (not or) переменные 'DOCTORSEE_DATE_TIME' и 'PT_ACUITY' имеют значение «Null».

У меня есть код, который удаляет записи, когда либо DOCTORSEE_DATE_TIME или PT_ACUITY равны NULL, но мне нужно, чтобы это «ЛИБО» было «И».

TAT_v3 = TAT_v2.dropna(subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all')

Я пробовал эту строку кода, но получил и ОШИБКА:

КОД

TAT_v3 = TAT_v2.dropna((subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all') & (subset=['PT_ACUITY'],how='all'))

ОШИБКА

  File "<ipython-input-14-6b23c103c833>", line 2
    TAT_v3 = TAT_v2.dropna((subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all') & (subset=['PT_ACUITY'],how='all'))
                                  ^
SyntaxError: invalid syntax

1 Ответ

1 голос
/ 18 июня 2020

Вы можете использовать df.isnull() с all() следующим образом:

df = pd.DataFrame({
    'DOCTORSEE_DATE_TIME': [1, np.nan, np.nan],
    'PT_ACUITY': [2, 3, np.nan],
    'SOME_OTHER_COL': [np.nan, 4, 5]
})

cols = ['DOCTORSEE_DATE_TIME', 'PT_ACUITY']  # choose columns that must all be null
results = df[~df[cols].isnull().all(axis=1)]

Результаты:

   DOCTORSEE_DATE_TIME  PT_ACUITY  SOME_OTHER_COL
0                  1.0        2.0             NaN
1                  NaN        3.0             4.0

Почему это работает:

df[cols].isnull() дает a True или False значение для каждой ячейки:

 DOCTORSEE_DATE_TIME  PT_ACUITY
0                False      False
1                 True      False
2                 True       True

Привязка .all(axis=1) к этому сокращает результаты до одного значения True или False для каждой строки (axis=0 будет проверять по столбцам, а не по строкам):

0    False
1    False
2     True

Оператор ~ используется для получения обратных результатов:

0     True
1     True
2    False

Эта серия True, True, False затем используется для разделения нашего исходного DataFrame, поэтому сохраняются только первые две строки.

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