Plotly: Как построить график времени на основе периода? - PullRequest
1 голос
/ 05 февраля 2020

Привет, ребята. У меня есть этот набор данных:

import pandas as pd 

# 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) 

# Print the output. 
print(dfy)

Я хочу нанести на график результат по периоду, который должен быть месяц и год. Теперь месяц и год находятся в разных столбцах, как я могу их объединить, чтобы получить график результатов по месяцам и годам. у легенды должно быть имя результата?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вы можете создать новый столбец, заполненный датами, на 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')
1 голос
/ 05 февраля 2020

Ваш набор данных очень ограничен. Основываясь на подходе из Джезраэля, я могу представить следующее:

enter image description here

Если это действительно то, что вы ищете, я могу объяснить детали. Если нет, то я уверен, что мы найдем другой подход.

Вот код на данный момент:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...