您好我正在寻找创建某种频率表,我可以获得行(或列)百分比,目的是能够在条形图中并排绘制数据。输出看起来像这样:
Male Female
Mon 21% 79%
Tues 33% 67%
Weds 11% 89%
目前我的数据如下:
Day Gender
Mon Male
Mon Female
Mon Female
Weds Female
Fri Male
最后我只想要5个条形图(每天一个),每个性别有两个条形图。我试过groupby:
df.groupby(['day','gender']).size()
但是这只会给出原始计数,并且两个直方图都无法解释,并且条形图看起来很奇怪,因为我无法正常化(某些日子的体积比其他日子高得多)。任何帮助将不胜感激!
答案 0 :(得分:2)
在上面执行你的组之后,你需要取消堆叠结果(这会产生一个数据透视表)。
gb = df.groupby(['Day','Gender']).size().unstack()
>>> gb
Gender Female Male
Day
Fri NaN 1.000000
Mon 0.666667 0.333333
Weds 1.000000 NaN
您可能希望用零填充NaN(.fillna(0)
)。
现在您可以将此结果除以行的总和:
>>> gb.div(gb.sum(axis=1).values, axis=0)
Gender Female Male
Day
Fri NaN 1.000000
Mon 0.666667 0.333333
Weds 1.000000 NaN
您可以通过附加.plot(kind='bar')