我有一个看起来像这样的数据框:
Category counts Decade
0 1.0 55 80s
1 2.0 27 80s
2 3.0 13 80s
3 4.0 7 80s
4 5.0 4 80s
0 1.0 55 90s
1 2.0 31 90s
2 3.0 8 90s
3 5.0 7 90s
4 4.0 3 90s
0 1.0 84 00s
1 2.0 35 00s
2 3.0 10 00s
3 4.0 6 00s
4 5.0 1 00s
0 1.0 137 10s
1 2.0 32 10s
2 3.0 13 10s
3 4.0 12 10s
4 5.0 1 10s
然后我将其绘制为堆积的条形图:
df.pivot_table('counts', 'Decade', 'Category', 'first').plot.bar(stacked=True)
但是,这不按时间顺序组织我的酒吧。我意识到它们是字符串,但是我认为它将按照数据帧的顺序从上到下绘制条形图。我该如何迫使剧情开始于80年代,然后向右增加十年?
答案 0 :(得分:2)
pivot_table
产生排序后的索引,因此您可以在枢轴之后reindex
来确保正确的打印顺序。
(df.pivot_table('counts', 'Decade', 'Category', 'first')
.reindex(['80s', '90s', '00s', '10s'])
.plot.bar(stacked=True, figsize=(4,3))
另一种选择,您可以使用CategoricalDtype
来执行自定义排序:
import pandas as pd
my_cat = pd.CategoricalDtype(categories=['80s', '90s', '00s', '10s'], ordered=True)
df['Decade'] = df['Decade'].astype(my_cat)
现在,当您旋转时,将正确排序以进行绘图,而无需使用reindex
df.pivot_table('counts', 'Decade', 'Category', 'first')
#Category 1.0 2.0 3.0 4.0 5.0
#Decade
#80s 55 27 13 7 4
#90s 55 31 8 3 7
#00s 84 35 10 6 1
#10s 137 32 13 12 1