2 回答
TA贡献1804条经验 获得超7个赞
您可以创建由日期时间填充的新列,to_datetime如果通过 3 列 DataFrame 与Year, Month,Day列然后是月份周期Series.dt.to_period:
dfy['dates'] = pd.to_datetime(dfy[['Year','Month']].assign(Day=1))
dfy['per'] = dfy['dates'].dt.to_period('m')
print(dfy)
Year Month Outcome outcome_count dates per
0 2017 1 dead 20 2017-01-01 2017-01
1 2018 1 alive 21 2018-01-01 2018-01
2 2018 2 alive 19 2018-02-01 2018-02
3 2019 3 empty 18 2019-03-01 2019-03
然后可以用句点或日期时间绘制:
dfy.plot(x='per', y='outcome_count')
dfy.plot(x='dates', y='outcome_count')
TA贡献2016条经验 获得超9个赞
您的数据集非常有限。在 jezrael 的方法的基础上,我能够产生这个:
https://i.stack.imgur.com/HZ0eR.png
如果这实际上是您正在寻找的东西,我可以解释详细信息。如果没有,那么我相信我们会找到另一种方法。
这是到目前为止的代码:
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()
添加回答
举报