Сравнение двух колонок дат, чтобы указать, произошло ли событие после другого.

Вопрос или проблема

У меня есть датафрейм, в котором я хочу вернуть количество (долю) пациентов, которые прошли последующий осмотр после диагноза заболевания.

Исходный ДФ (пример 1 пациента)

| patient_id | app_date   | diag_date  | cancer_yn |
|------------|------------|------------|-----------|
| 1          | 2024-01-11 | NaT        | NaN       |
| 1          | 2024-03-14 | 2022-03-14 | 1         |
| 1          | 2024-04-09 | NaT        | NaN       |
| 1          | 2024-09-09 | NaT        | NaN       |

Вы можете увидеть, что во 2-й записи указана запись, когда был поставлен диагноз (diag_date доступен и совпадает с app_date), у этого пациента были последующие записи, я хочу пометить это как случай (например, follow_ups == 1).

Мне сложно понять, как я могу сгруппировать разных пациентов и применить value_counts() к флагу, указывающему на то, что пациент прошел последующие осмотры после диагноза. Предложения по способам преобразования данных и генерации флага были бы отличными.

Ответ или решение

Вопрос, который вы подняли, связан с анализом данных в датафрейме, содержащем информацию о пациентах, их диагнозах и последующих посещениях. В данной ситуации нам необходимо определить, имелись ли последующие записи о приёме после даты диагноза. В этой статье мы рассмотрим, как провести такое сравнение и вычислить необходимую пропорцию.

Шаг 1: Понимание структуры данных

На примере вашего датафрейма, мы видим столбцы:

  • patient_id (идентификатор пациента)
  • app_date (дата приёма)
  • diag_date (дата диагноза)
  • cancer_yn (индикатор наличия рака)

Шаг 2: Определение логики

Для каждого пациента нам необходимо определить:

  1. Дату диагноза.
  2. Имеются ли записи о приёмах (app_date), которые происходят после этой даты.

Шаг 3: Реализация в Python с использованием Pandas

Теперь перейдем к коду. Для работы с вашим датафреймом мы воспользуемся библиотекой Pandas.

import pandas as pd

# Пример исходного датафрейма
data = {
    'patient_id': [1, 1, 1, 1],
    'app_date': pd.to_datetime(['2024-01-11', '2024-03-14', '2024-04-09', '2024-09-09']),
    'diag_date': [pd.NaT, pd.to_datetime('2022-03-14'), pd.NaT, pd.NaT],
    'cancer_yn': [pd.NA, 1, pd.NA, pd.NA]
}

df = pd.DataFrame(data)

# Добавляем столбец для хранения информации о последующих посещениях
def get_follow_up_flag(group):
    # Дата диагноза
    diag_date = group['diag_date'].dropna().iloc[0] if not group['diag_date'].dropna().empty else pd.NaT
    # Проверяем, есть ли последующие посещения
    group['follow_ups'] = (group['app_date'] > diag_date).astype(int) if pd.notna(diag_date) else 0
    return group

# Группируем по пациентам и применяем функцию для вычисления флага
df = df.groupby('patient_id').apply(get_follow_up_flag)

# Подсчитываем количество пациентов с последующими посещениями
follow_up_counts = df.groupby('patient_id')['follow_ups'].max()

# Вычисляем пропорцию пациентов с последующими посещениями
proportion = (follow_up_counts.sum() / len(follow_up_counts)) * 100

print("Пропорция пациентов с последующими посещениями (после диагноза): {:.2f}%".format(proportion))

Объяснение кода

  1. Импортируем библиотеки: Мы импортируем Pandas для работы с данными.
  2. Создаем датафрейм: Определяем структуру данных с помощью словаря и преобразуем даты в формат datetime.
  3. Функция get_follow_up_flag:
    • Выбираем дату диагноза.
    • Проверяем, есть ли последующие посещения, используя сравнение дат.
    • Добавляем соответствующий флаг follow_ups.
  4. Группировка по пациентам: Применяем функцию для каждого пациента.
  5. Подсчет и вычисление пропорции: Подсчитываем количество пациентов с флагом последующих посещений и вычисляем пропорцию.

Заключение

Описанный метод позволяет вам быстро и эффективно определять, имели ли пациенты последующие посещения после диагноза. Это даст возможность провести дальнейший анализ и сделать выводы о требуемых медицинских вмешательствах. Важно использовать такие инструменты, как Pandas, для оптимизации обработки данных и анализа, что значительно повышает эффективность работы аналитиков в медицинской сфере.

Оцените материал
Добавить комментарий

Капча загружается...