2 回答
TA贡献1895条经验 获得超3个赞
在发送到绘图之前,您需要groupby和countpandas 中的行进行比较。另外,您的示例没有显示它,但是如果您期望同一个月内有不同的日期并且您只关心年/月,那么您需要在分组之前应用一些舍入(或从日期中提取年和月data['Date'].dt.year,data['Date'].dt.month无论你喜欢哪个)。
取这个稍微不同的样本,其中添加了 10/2
import plotly.express as px
data = {'Project': ['Project 1', 'Project 2', ' Project 3', 'Project 4', 'Project 5', 'Project 6', 'Project 7', 'Project 8', 'Project 9', 'Project 10'],
'Date': ['10/1/2020', '10/2/2020', '11/1/2020', '12/1/2020', '12/2/2020', '12/1/2020', '2/1/2021', '2/1/2021', '3/1/2021', '4/1/2021']}
df2 = pd.DataFrame(data, columns = ['Project','Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
df_grouped = (
df2.groupby(
# normalize all dates to start of month
df2['Date'].astype('datetime64[M]')
)['Project'].count().rename('Count').to_frame()
)
df_grouped['Names'] = (
df2.groupby(df2['Date'].astype('datetime64[M]')
)['Project'].agg(',<br> '.join)
)
print(df_grouped)
fig = px.line(
df_grouped, y='Count', title='<b>Projects per month</b>',
hover_data=['Names']
)
fig.write_html('fig1.html', auto_open=True)
更新:根据要求,此新代码在悬停时显示项目名称。
输出
Count Names
Date
2020-10-01 2 Project 1,<br> Project 2
2020-11-01 1 Project 3
2020-12-01 3 Project 4,<br> Project 5,<br> Project 6
2021-02-01 2 Project 7,<br> Project 8
2021-03-01 1 Project 9
2021-04-01 1 Project 10
TA贡献1828条经验 获得超3个赞
您可以使用Matplotlib 的 hist轻松实现这一点
例子:
from datetime import datetime
import matplotlib
import pandas as pd
from matplotlib.pyplot import hist
df = pd.DataFrame(
{'a': [1, 2, 3, 4]},
index=[datetime(2020, 9, 24),
datetime(2020, 9, 24),
datetime(2020, 9, 24),
datetime(2020, 9, 25)]
)
hist(df.index)
不是最漂亮的直方图,但我相信您可以从这里根据您的需要调整它;)
添加回答
举报