Python 熊猫绘制条形图,其中X和Y值为列值

Python 熊猫绘制条形图,其中X和Y值为列值,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我有一个数据集,它有两列,a列是二进制数0/1,B列是一些字符,'a','B','C'。每个“A”、“B”、“C”都映射到A列中的一个数字 我的问题是,我如何绘制一个像下面这样的图表?X值是与B列不同的值,即“A”、“B”、“C”,对于每个X值,显示映射到该X值的0/1的数量 我还尝试: df = df['A'].value_counts().rename("01").to_frame() ax = df.plot(kind='bar',figsize=(8, 4),rot

我有一个数据集,它有两列,a列是二进制数0/1,B列是一些字符,'a','B','C'。每个“A”、“B”、“C”都映射到A列中的一个数字

我的问题是,我如何绘制一个像下面这样的图表?X值是与B列不同的值,即“A”、“B”、“C”,对于每个X值,显示映射到该X值的0/1的数量

我还尝试:

df = df['A'].value_counts().rename("01").to_frame()
ax = df.plot(kind='bar',figsize=(8, 4),rot=0)
class_names = ['A','B','C']
ax.set_xticklabels(class_names)
但它不起作用。

Seaborn 一个简单的选择是

如果您的数据如下所示:

df=pd.DataFrame({'A':np.random.choice([0,0,1],size=100),'B':np.random.choice(['A','A','A','B','C','C','C','size=100]))
#A B
#0摄氏度
#10b
#21 B
# .. .. ..
#97 1 C
#98 0 A
#990A
然后用
x='B'
hue='A'
调用:

导入seaborn作为sns
countplot(data=df,x='B',hue='A',order=['A','B','C'])


只有熊猫 要仅对熊猫执行此操作,您可以使用:

df.groupby(['B','A']).size().unstack().plot.bar()


百分比 使用并添加
%
列:

g=df.groupby(['B'])['A'].value\u计数(normalize=True.unstack().mul(100)
g['%']=df.B.value_计数(normalize=True).mul(100)
#           0          1     %
#A 59.574468 40.425532 47.0
#B 66.666667 33.333333 21.0
#C 71.875000 28.125000 32.0
然后,将为
plot.bar()正确构造所有内容:

g.plot.bar(ylabel='percentage')

您是否愿意使用seaborn
?@tdy,是的,任何方法都可以!还有一个问题tho,如果我想在0/1之外添加第三个百分比条,如问题中的图表,该怎么办?@zxcisnoias检查底部的编辑是否是您要查看的内容。例如,a中的蓝色条表示0的平均百分比,a中的橙色条表示1的平均百分比,a/B/C中的绿色条表示a的平均百分比