【发布时间】:2022-01-19 12:49:28
【问题描述】:
我一直在努力将 GroupBy 的结果绘制在三列上。 我有 3 年 (MonthYear) 内员工 (Employee) 的不同缺勤 (AbsenceType) 的数据。我想在一个图中绘制一个员工在每个月每年有多少特定类型的缺勤。我在示例中只有两名员工,但数据中还有更多的员工以及更多的月-年值。
创建数据
data = {'Employee': ['ID1', 'ID1','ID1','ID1','ID1','ID1','ID1', 'ID1', 'ID1', 'ID2','ID2','ID2','ID2','ID2', 'ID2'],
'MonthYear': ['201708', '201601','201601','201708','201710','201801','201801', '201601', '201601', '201705', '201705', '201705', '201810', '201811', '201705'],
'AbsenceType': ['0210', '0210','0250','0215','0217','0260','0210', '0210', '0210', '0260', '0250', '0215', '0217', '0215', '0250']}
columns = ['Employee','MonthYear','AbsenceType']
df = pd.DataFrame(data, columns=columns)
然后我将 AbsenceType 的每个代码映射为两类:生病或受伤。
df['SickOrInjury'] =df['AbsenceType'].replace({'0210':'Sick', '0215':'Sick', '0217':'Sick', '0250':'Injury', '0260':'Injury'})
我想要实现的是以下groupby:
test = df.groupby(['Employee', 'MonthYear', 'SickOrInjury'])['SickOrInjury'].count()
但是,当我尝试绘制它时,它并没有完全显示我想要的。到目前为止,我设法登上了舞台:
df.groupby(['Employee', 'MonthYear', 'SickOrInjury'])['SickOrInjury'].count().unstack('SickOrInjury', fill_value=0).plot()
plt.show()
test plot 但是,员工 ID 显示在 X 轴上,而不是图例中。
我想要的是这样的: desired plot 我想在 X 轴上有时间,在 Y 轴上有每种缺勤类型(生病或受伤)的计数。每个缺勤类型应该有两种不同类型的线条(例如实线和虚线),每个员工应该有不同的颜色(例如黑色和红色)。
非常感谢任何建议。
【问题讨论】:
标签: python pandas matplotlib group-by