Вы можете использовать seaborn.FaceGrid
:
g = sns.FacetGrid(data=df, row='Spend_Year', col='Product')
g = g.map(sns.lineplot, 'City', 'Total_Spend')
Или вы можете использовать groupby()
:
fig, axes = plt.subplots(3,3)
for (k,d), ax in zip(df.groupby(['City','Spend_Year']), axes.ravel()):
city, year = k
d.plot(x='City', y='Total_Spend', ax=ax)
# extra format with ax if needed
ax.set_title(f'{city} - {year}')