Ваш набор данных очень ограничен. Основываясь на подходе из Джезраэля, я могу представить следующее:
Если это действительно то, что вы ищете, я могу объяснить детали. Если нет, то я уверен, что мы найдем другой подход.
Вот код на данный момент:
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
# intialise data of lists.
data = {'Year':['2017', '2018', '2018', '2019'],'Month':['1', '1', '2', '3'],'Outcome':['dead', 'alive', 'alive', 'empty'], 'outcome_count':[20, 21, 19, 18]}
# Create DataFrame
dfy = pd.DataFrame(data)
# approach from jezrael
dfy['dates'] = pd.to_datetime(dfy[['Year','Month']].assign(Day=1))
dfy['per'] = dfy['dates'].dt.to_period('m')
# periods as string
dfy['period']=[d.strftime('%Y-%m') for d in dfy['dates']]
# unique outcomes
outcomes = dfy['Outcome'].unique()
# plotly setup
fig = go.Figure()
# one trace per outcome
for outcome in outcomes:
df_plot = dfy[dfy['Outcome']==outcome]
fig.add_trace(go.Scatter(x=df_plot['period'], y=df_plot['outcome_count'],
name=outcome
))
fig.show()