我什至不知道如何用语言正确解释我的问题,所以让我举个例子。 假设我有一个这样的数据帧
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()