每周按点数排序枢轴图

时间:2019-03-21 22:28:36

标签: python pandas matplotlib

绘制以下数据集时:

date = ['2/18/2019','2/18/2019','2/18/2019','2/18/2019','2/25/2019','2/25/2019','2/25/2019','2/25/2019','3/4/2019','3/4/2019','3/4/2019','3/4/2019',
        '3/11/2019','3/11/2019','3/11/2019','3/11/2019','3/18/2019','3/18/2019','3/18/2019','3/18/2019']
name = ['P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N','P','L','E','N']
count = [0,0,0,0,0,0,0,0,1,5,0,0,1,7,1,2,2,7,1,2]
df = pd.DataFrame({'date': date, 'name': name, 'count':count}).sort_values(['date','count'],ascending=[True, False])

我想每周保持订单,即在每个星期内,值应按计数进行排序,例如3/18,我们应该首先获得L,然后是P或N,然后是E。

但是,顺序在旋转后会中断,并且在绘制时会按字母顺序显示数据。有什么办法可以在每周内按计数进行绘制?

piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
piv.plot(kind='bar', stacked=True, rot=0, grid=True)

2 个答案:

答案 0 :(得分:1)

列的顺序是条形图的堆叠方式。如果数据透视表中有E,L,N,P,则这将是序列的顺序(当前代码)。您可以更改此顺序,但是所有条形都将具有相同的顺序。这是一个按字母组(即E = 2)计数条形的示例

piv = df.pivot(index='date', columns='name', values='count')
piv = piv.reset_index(level=piv.index.names)
cols = ["date"] + piv[list("ELPN")].sum().sort_values(ascending=False).keys().tolist()
piv = piv[cols]
piv.plot(kind='bar', stacked=True, rot=0, grid=True)

enter image description here

enter image description here

我怀疑您希望每个小节的顺序不同。我不认为Pandas可以做到这一点,但是可以直接用matplotlib完成。

答案 1 :(得分:0)

您可以对轴1上的数据进行排序,然后进行绘图。

df.pivot(index = 'date', columns='name', values='count')\
.sort_values(by='2019-03-18', ascending=False, axis=1)\
.plot.bar(stacked = True, grid = True)

enter image description here