【发布时间】:2014-05-03 07:51:09
【问题描述】:
什么是 Pythonic/pandas 对 pandas 列中的“级别”进行排序以在条形图中给出特定条形顺序的方式。
例如,给定:
import pandas as pd
df = pd.DataFrame({
'group': ['a', 'a', 'a', 'a', 'a', 'a', 'a',
'b', 'b', 'b', 'b', 'b', 'b', 'b'],
'day': ['Mon', 'Tues', 'Fri', 'Thurs', 'Sat', 'Sun', 'Weds',
'Fri', 'Sun', 'Thurs', 'Sat', 'Weds', 'Mon', 'Tues'],
'amount': [1, 2, 4, 2, 1, 1, 2, 4, 5, 3, 4, 2, 1, 3]})
dfx = df.groupby(['group'])
dfx.plot(kind='bar', x='day')
我可以生成以下一对图:
条形的顺序遵循行顺序。
对数据重新排序以使条形图的条形按周一至周日排列的最佳方式是什么?
更新:这个垃圾解决方案有效 - 但它使用额外的排序列的方式远非优雅:
df2 = pd.DataFrame({
'day': ['Mon', 'Tues', 'Weds', 'Thurs', 'Fri', 'Sat', 'Sun'],
'num': [0, 1, 2, 3, 4, 5, 6]})
df = pd.merge(df, df2, on='day')
df = df.sort_values('num')
dfx = df.groupby(['group'])
dfx.plot(kind='bar', x='day')
进一步概括:
是否有一种解决方案也可以修复“闪避”条形图中的条形顺序:
df.pivot('day', 'group', 'amount').plot(kind='bar')
【问题讨论】:
标签: python matplotlib pandas