Существует простое решение, используя только одну строку pandas
(если вы сначала переставляете данные) или используя plotly
Данные
import pandas as pd
df = pd.DataFrame({'city': {0: 'Houston',
1: 'Dallas',
2: 'Dallas',
3: 'Houston',
4: 'Houston',
5: 'Dallas'},
'rate': {0: 132.768382,
1: 151.981043,
2: 112.897727,
3: 132.332665,
4: 232.611185,
5: 93.530662},
'Bedrooms': {0: 0, 1: 1, 2: 3, 3: 1, 4: 2, 5: 4}})
# groupby
df = df.groupby(["city", "Bedrooms"])["rate"].mean().reset_index()
Pandas - Matplotlib
С помощью pivot_table
мы можем переставить наши данные
pv = pd.pivot_table(df,
index="Bedrooms",
columns="city",
values="rate")
city Dallas Houston
Bedrooms
0 NaN 132.768382
1 151.981043 132.332665
2 NaN 232.611185
3 112.897727 NaN
4 93.530662 NaN
И затем построить только одну строку.
pv.plot(kind="bar");
Использование Plotly
import plotly.express as px
px.bar(df, x="Bedrooms", y="rate", color="city",barmode='group')