Python 如何在Streamlight上按时段分组绘制绘图?

Python 如何在Streamlight上按时段分组绘制绘图?,python,plotly,streamlit,Python,Plotly,Streamlit,我正在尝试使用Plotly+Streamlit绘制一个折线图,但将数据按月分组 我有以下数据: id date grade A 2020-01-01 100 B 2020-01-11 200 C 2020-01-21 500 D 2020-01-21 300 E 2020-02-01 100 F 2020-02-01 200 我想画出月平均成绩。到目前为止,我

我正在尝试使用Plotly+Streamlit绘制一个折线图,但将数据按月分组

我有以下数据:

id      date          grade
A       2020-01-01    100
B       2020-01-11    200
C       2020-01-21    500
D       2020-01-21    300
E       2020-02-01    100
F       2020-02-01    200
我想画出月平均成绩。到目前为止,我得到的是:

df = pd.to_datetime(df["date"], format="%m/%d/%y %I:%M%p")

df_grouped = df.groupby(
    by=[df.index.month, df.index.year]
)

df.grade.mean().plot()
问题是,我不知道如何使用plotly和Streamlight做同样的事情(或类似的事情)


有什么想法吗?

您还没有指定想要哪种类型的条形图,但我猜一个
go.bar()
就可以了。但我们可以改变这一点。对于分组和聚合,我将使用以下方法:

df['date'] = pd.to_datetime(df["date"])
df['months'] = df['date'].dt.month_name()
df_months = df.groupby(['months']).agg('mean').reset_index()
new_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
df_months['months'] = pd.Categorical(df_months['months'], categories=new_order, ordered=True)
df_months = df_months.sort_values('months')
为什么这么复杂?因为我假设你希望在你的x轴上有月份名称。在按月份名称对值进行分组和聚合后,月份的顺序可能会变得混乱。上面有些费劲的方法确保不会发生这种情况,并且您可以按照正确的顺序使用此条形图:

完整代码:
我试过这段代码,但有一件事让我想到,如果我有多年的时间,这应该不会起作用,对吧?@dummyds也许不是这个确切的方法。但可能还有其他方法。所以我建议你把它写下来作为一个答案,我们将从那里开始
import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({'id': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F'},
                     'date': {0: '2020-01-01',
                      1: '2020-01-11',
                      2: '2020-01-21',
                      3: '2020-01-21',
                      4: '2020-02-01',
                      5: '2020-02-01'},
                     'grade': {0: 100, 1: 200, 2: 500, 3: 300, 4: 100, 5: 200}})

df['date'] = pd.to_datetime(df["date"])
df['months'] = df['date'].dt.month_name()
df_months = df.groupby(['months']).agg('mean').reset_index()
new_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
df_months['months'] = pd.Categorical(df_months['months'], categories=new_order, ordered=True)
df_months = df_months.sort_values('months')

fig=go.Figure(go.Bar(x=df_months.months, y=df_months.grade))
fig.show()