Understand the idea
ax.bar draws supplied heights exactly. Calculate the intended mean or total first; the drawing call does not summarize raw records.
A small example
For group A values [2, 6], use height 4 for an average or height 8 for a total.
Follow the code
Apply the idea to the supplied table. Read from top to bottom; the final line displays the result.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
means = df.groupby("flavour")["price"].mean()
ax.bar(means.index, means.values)
ax.set(title="Candy shop", xlabel="flavour", ylabel="Mean price")
fig.tight_layout()
plt.show()What each part does
df.groupby("flavour")["price"].mean()- Compute one average price per flavour before drawing bars.
means.index- Use the flavour labels as bar positions.
means.values- Use the already computed averages as bar heights.
ax.bar(means.index, means.values)- Draw those exact heights; bar does not calculate an average for you.
Other choices for later exercises
.sum()- Compute group totals instead when the question asks for totals.
Your inputs
The editable setup on the right creates df. Run executes the setup and your work from top to bottom.
| candy | flavour | price | rating | shelf |
|---|---|---|---|---|
| Gummy Bear | fruity | 1.2 | 4.1 | A |
| Choco Pop | chocolate | 2.1 | 4.6 | B |
| Mint Bite | mint | 1.5 | 3.8 | A |
| Berry Loop | fruity | 2.8 | 4.4 | B |
| Cocoa Cube | chocolate | 3.4 | 4.9 | A |
| Lemon Drop | fruity | 1.8 | 4 | B |
Your task · Follow
- Using df, calculate mean price by flavour, then draw those exact values as bars.
- This compares catalogue prices, not sales revenue.
- Chart: title "Candy shop"; x "flavour"; y "Mean price".
Hint
Choose the observations first, then map the requested measurements to the chart.
Reveal solution
One way to do it. Keep any supplied setup in the editor and use this in the Your work section.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
means = df.groupby("flavour")["price"].mean()
ax.bar(means.index, means.values)
ax.set(title="Candy shop", xlabel="flavour", ylabel="Mean price")
fig.tight_layout()
plt.show()