Reputation: 805
I have a data frame which looks like
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
The columns describes the options for a question e.g., professor (Q1_1), baker (Q1_2), butcher (Q1_3), plumber (Q1_4), etc.
What I would like is to show the absolute and relative frequencies using a pie-chart and a bar chart stating the absolute values and the percentages of all the columns so in this case there will be 10 pieces of the pie and 10 bars; for example for col= Q1_5, the values will be 20% (2 items)
Upvotes: 3
Views: 3504
Reputation: 805
I figured it out.
First you need to "flatten all the columns in to one column":
df['Q1_all'] = (df.iloc[:, 0:] == 1).idxmax(1)
Then just apply whatever function:
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"]])
Upvotes: 0
Reputation: 1106
You need to sum up the columns to get absolute frequencies. Assuming you use pandas, you can use df.sum()
for that. Then you can plot the results with matplotlib.
For a quick bar chart you could use
df.sum().plot(kind=bar)
Upvotes: 1