Python 基于公共x轴值对Dataframe列图进行分组

Python 基于公共x轴值对Dataframe列图进行分组,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个数据框,可以查看2001年到2015年的局部最大质量。它的一部分看起来像: 我正在使用下面的曲线图将数据帧绘制为图形。但是,每个记号都显示年份,在绘图上看起来很拥挤 df.plot(kind='bar', color='xkcd:grassy green', title=title, y='Max Mass (kg/m)', x='year') 是否有办法将2001列分组到单个“2001”组下,依此类推,并使用2002-2015的值。正在查找类似以下内容的内容: 谢谢你我认为这应该

我有一个数据框,可以查看2001年到2015年的局部最大质量。它的一部分看起来像:

我正在使用下面的曲线图将数据帧绘制为图形。但是,每个记号都显示年份,在绘图上看起来很拥挤

df.plot(kind='bar', color='xkcd:grassy green', title=title, y='Max Mass (kg/m)', x='year')
是否有办法将2001列分组到单个“2001”组下,依此类推,并使用2002-2015的值。正在查找类似以下内容的内容:


谢谢你

我认为这应该可以解决问题……假设每年的每组长度相同。如果没有,则可能需要对每组进行分批次

# sample df
df = pd.DataFrame({'year':[2001,2001,2001,2001,2002,2002,2002,2002], 'mass':[1,2,3,4,1,3,2,4]})

# create a multiindex from the cumcount of each year group
df['idx'] = df.groupby('year').cumcount()
df.set_index(['year', 'idx'], inplace=True)

# unstack and plot
df.unstack().plot.bar(legend=False, color='xkcd:grassy green', title='TITLE')

你能做一些类似于
df.groupby('year').apply(lambda x:x['Max Mass(kg/m)]).unstack().plot.bar(legend=False)
@Chris我运行了代码,得到了一个图表,它似乎在正确的轨道上(如果有什么方法可以告诉我)。我还没有学会“lambda”表达式,所以我不知道你的代码是如何工作的,有没有办法使用类似
df.groupby(['year']).apply(lambda x:x['Max Mass(kg/m)]).unstack().plot(kind=kind,color='xkcd:grassy green',title=title,y='Max Mass(kg/m)',x='year')
这样我就可以更好地控制图形格式了?由于某种原因,我因“年”而收到一个关键错误。@Chris nevermind上面的评论,你的方法是有效的,效果很好!我注意到,这些列被移动,而不是从标记标签的中心。知道为什么吗?增加列的宽度只会将列从标签上进一步拉伸。我刚刚创建了一个快速示例进行测试,您是正确的。看起来这是因为在
取消堆栈之前的mulitindex的级别1,让我看看是否可以解决这个问题