如何从 pandas 数据框中的多个列创建单个饼图

How to create a single pie chart from multiple columns in a pandas data-frame

我有一个看起来像

的数据框
     Q1_1  Q1_2  Q1_3  Q1_4  Q1_5  Q1_6  Q1_7  Q1_8  Q1_9  Q1_10
0     0     0     1     0     1     0     0     0     0      0
1     0     0     0     0     0     0     0     0     1      0
2     0     0     0     0     0     1     0     0     1      0
3     1     0     1     0     1     0     0     0     0      0
4     0     0     1     0     0     0     0     0     0      0

这些列描述了问题的选项,例如,教授 (Q1_1)、面包师 (Q1_2)、屠夫 (Q1_3)、水管工 (Q1_4)等

我想要的是使用饼图和条形图显示绝对频率和相对频率,说明所有列的绝对值和百分比,因此在这种情况下将有 10 个饼图和10 格;例如,对于 col= Q1_5,值将为 20%(2 项)

您需要对列求和以获得绝对频率。假设您使用 pandas,您可以为此使用 df.sum()。然后你可以用matplotlib绘制结果。

对于快速条形图,您可以使用

df.sum().plot(kind=bar)

我明白了。

首先你需要"flatten all the columns in to one column":

df['Q1_all'] = (df.iloc[:, 0:] == 1).idxmax(1)

然后应用任意函数:

cross_tab_Q1_group = pd.crosstab([df.Q1_all], [df.group])
cross_tab_Q1_group.plot(kind="barh", stacked=True, color=[sns.xkcd_rgb['medium green'], sns.xkcd_rgb["pale red"], sns.xkcd_rgb["denim blue"]])