数据框的条形图

Posted

技术标签:

【中文标题】数据框的条形图【英文标题】:Bar Chart from Dataframe 【发布时间】:2017-10-24 14:08:02 【问题描述】:

我正在处理具有以下示例数据的熊猫数据框 (df):

0    Dec-16     N
1    Jan-17     N
2    Feb-17     Y
3    Feb-17     N
4    Jan-17     N
5    Mar-17     Y
6    Mar-17     Y
7    Jan-17     N
8    Jan-17     Y

使用

df_group = df.groupby(['MMM-YY', 'Valid'])

我得到以下输出:

MMM-YY  Valid
Dec-16      N      1
Feb-17      N      1
            Y      1
Jan-17      N      3
            Y      1
Mar-17      Y      2

我想使用这些数据创建一个条形图(以百分比显示 Y 和 N 的条形),但遗憾的是无法实现。我尝试将上述输出转换为新的数据帧,但没有成功。

任何解决此问题的指针将不胜感激。

【问题讨论】:

该输出有什么问题?我知道这是一个简单的问题,但我们需要知道出了什么问题才能给你一个明确的答案。您遇到了什么错误,或者这与您的期望有何不同?看How to Ask。 我想将从 groupby 收到的输出转换为数据框,以便生成条形图。这就是我认为对我有用的方法。如果有任何替代方法可以帮助我直接生成条形图就足够了。 @aryamccarthy 感谢您的链接,我的要求与您分享的非常相似。让我解决。不幸的是,我找不到这个。 【参考方案1】:

我认为你需要crosstabnormalize 每行+ DataFrame.plot.bar

df_group = df = pd.crosstab(df['MMM-YY'], df['Valid'], normalize=0) 
print (df_group)
Valid      N     Y
MMM-YY            
Dec-16  1.00  0.00
Feb-17  0.50  0.50
Jan-17  0.75  0.25
Mar-17  0.00  1.00

df_group.plot.bar()

如果需要每列标准化:

df_group1 = df = pd.crosstab(df['MMM-YY'], df['Valid'], normalize=1) 
print (df_group1)
Valid     N     Y
MMM-YY           
Dec-16  0.2  0.00
Feb-17  0.2  0.25
Jan-17  0.6  0.25
Mar-17  0.0  0.50

df_group1.plot.bar()

如果只需要计数值:

df1 = df = pd.crosstab(df['MMM-YY'], df['Valid']) 
print (df1)
Valid   N  Y
MMM-YY      
Dec-16  1  0
Feb-17  1  1
Jan-17  3  1
Mar-17  0  2

df1.plot.bar()

【讨论】:

以上是关于数据框的条形图的主要内容,如果未能解决你的问题,请参考以下文章

带有多索引熊猫数据框的条形图

数据框的条形图

使用 matplotlib 绘制堆积条形图,保持 pandas 数据框的顺序,因为它使用 python

使用两个数据框绘制并排条形图

带折线图的条形图 - 使用非数字索引

如何从 Pandas 数据框对象显示 X 轴到 Matplotlib 条形图