#python #pandas #dataframe #graph
Вопрос:
У меня есть огромный фрейм данных python, который выглядит примерно так.
HR ICULOS SepsisLabel PatientID
100.3 1 0 1
117.0 2 0 1
103.9 3 0 1
104.7 4 0 1
102.0 5 0 1
88.1 6 0 1
Получите доступ ко всему файлу здесь. Я построил колонку HR на основе ICULOS вот так. Код находится здесь:
ax = plt.gca()
ax.set_title("Patient ID = 1")
ax.set_xlabel('ICULOS')
ax.set_ylabel('HR Readings')
dummy.plot(kind='line',x='ICULOS',y='HR',ax=ax)
plt.show()
Что я хочу, так это добавить маркер на график HR на основе SepsisLabel (см. Файл). При ICULOS = 249 метка сепсиса изменяется от 0 до 1. Я хочу показать, что в этот момент на графике метка сепсиса изменилась (это то, что я хочу).
Комментарии:
1. Если вы знаете, в какую точку вы хотите добавить маркер, вы можете просто использовать plt.scatter() для этого.
2. Мне не нужен точечный рисунок. Мне нужен этот линейный график, чтобы я мог легко видеть тенденцию. Кроме того, набор данных огромен. Я хочу, чтобы код выяснил, при каких значениях ICULOS, sepsisLabel изменяется с 0 на 1. Здесь я упомянул просто для удобства
3. Я не имел в виду всю точечную диаграмму. Вы можете создать точечную диаграмму поверх той, которая у вас уже есть, и использовать ограниченное количество очков. Это означает, что вам нужно найти индексы, в которых sepsisLabel изменяется с 0 на 1, и передавать только эти точки на точечную диаграмму. Насколько я знаю, нет встроенных функций для проверки, когда он меняется, хотя вам нужно будет написать код, который делает это самостоятельно.
4. Что касается получения точных индексов, в которых sepsisLabel изменяется на 1, вы можете использовать np.ediff1d()
Ответ №1:
Если я правильно понимаю, что вы хотите сделать, это 1) найти индекс изменения значения и 2) построить (рассеять) там точку с определенным типом маркера.
Что касается 1), вы можете использовать dummy['SepsisLabel'].diff().idxmax()
. diff()
создает массив из 0 с 1 при каждом изменении от 0 до 1 и обратно. idxmax()
затем находит первое изменение — точку, которую вы ищете.
Объявление 2): Вы можете просто использовать plt.scatter(x, y, marker='X')
перед plt.show()
тем, как нарисовать точку. Все, что вы нарисуете ( pandas
matplotlib
или другие) перед вызовом plt.show()
, все равно будет отображаться в сюжете.