Python 这是指未堆叠的数据,然后将其绘制为水平堆叠条形图
我有一个这样的数据集Python 这是指未堆叠的数据,然后将其绘制为水平堆叠条形图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个这样的数据集 Category Date Score_1 Score_2 Level A 1/1/2020 130 145 Excellent A 1/5/2020 145 148 Excellent C 1/2/2020 107 109 Need-Improvement B 1/1/2020 125
Category Date Score_1 Score_2 Level
A 1/1/2020 130 145 Excellent
A 1/5/2020 145 148 Excellent
C 1/2/2020 107 109 Need-Improvement
B 1/1/2020 125 128 Good
C 1/7/2020 105 107 Need-Improvement
B 1/2/2020 127 117 Good
A 1/12/2020 117 126 Good
C 1/12/2020 123 124 Good
数据集-2
Category Mean Excellent(%) Good(%) Need-Improvement(%)
A 130.6 66.67 33.33 0
B 126 0 100 0
C 111.6 0 66.67 33.33
我想从dataset1创建一个dataset-2,方法是创建mean from score_1值,创建级别值作为列,并查找每个类别和级别的百分比值。
为此我写了
Df_90=pd.DataFrame()
Df_90["Mean"]=df.groupby('Category')["Score_1"].mean()
Df_90=D_90.reset_index()
这只实现了第一个目标,而没有取消。就这样在下面试过了
df.groupby('Category')["Score_1"].mean().unstack('Level').head()
这引发了一个错误
KeyError:'请求的级别(级别)与索引名称(类别)不匹配'
然后将图形绘制为每个类别的水平条形图,并按级别值以百分比进行堆叠。平均值决定了杆的长度,而堆叠的杆成为其中的水平百分比。您可以分别聚合平均值和水平频率,然后将它们组合在一起:
mean_score=df.groupby('Category').agg(平均值=('score_1','mean'))
级别\频率=(
df.groupby(['Category']))
['Level'].值\u计数(normalize=True)
穆尔先生(100)
.取消堆叠(填充值=0)
.重命名_轴(列=无)
.add后缀(“()”
)
结果=局部放电浓度([平均得分,频率等级],轴=1)
谢谢,但无法使用result=result.reset_index()result.plot.barh(x=“Category”,y=“Mean”,stacked=True,title='Scores')进行绘图。不确定如何使用level\u frekstackingMean进行堆叠,因为这不是性能类别,所以没有意义。您应该只堆叠需要改进/良好/优秀的列:result.drop(columns='Mean').plot.barh(stacked=True)
是的,您是对的,我希望将level_freq(需要改进/良好/优秀)堆叠起来,但我希望平均值指示条的长度。百分比显示在堆栈中