在 x 轴上绘制具有特征的直方图,每个条形应反映具有不同颜色的目标类 var



我什至不知道如何用语言正确解释我的问题,所以让我举个例子。 假设我有一个这样的数据帧

d = {'feat':[1,1,1,2,3,4,5,1,4,5],'grade':['A','B','A','A','B','C','D','C','D','A']}
df1 = pd.DataFrame(d)
df1
feat    grade
0   1   A
1   1   B
2   1   A
3   2   A
4   3   B
5   4   C
6   5   D
7   1   C
8   4   D
9   5   A

所以我有一个特征变量(feat(,grade有一个目标类变量,我的特征只能落在A,B,C,D等级之一。 现在当我这样做时

df1.groupby('feat')['grade'].value_counts()

我得到

feat  grade
1     A        2
B        1
C        1
2     A        1
3     B        1
4     C        1
D        1
5     A        1
D        1
Name: grade, dtype: int64

现在这是我问题的确切形状,我想绘制此数据帧的直方图,以便 x 轴表示feat并且此直方图的每个条形将由不同的颜色组成,这些颜色将与等级的出现成正比。

我会用 groupby(( 的结果创建一个新的数据帧,并使用 seaborn 绘制生成的直方图:

import pandas as pd
import seaborn as sns
df = pd.DataFrame({'feat':[1,1,1,2,3,4,5,1,4,5,1,2,2,4],'grade':['A','B','A','A','B','C','D','C','D','A','A','A','A','D']})
d = df.groupby('feat')['grade'].value_counts()
data = d.to_frame(name='number')
data = data.reset_index()
sns.barplot('feat','number',data=data,hue='grade')

或者,如果您不想使用 seaborn,则需要创建一个数据透视表:

new_data = pd.pivot_table(data, values='number',index='feat',columns='grade')
new_data.plot.bar()

最新更新