I’m currently doing a sales analysis I found online, and was wondering how I could display the x axis values (Days of the Week) from their current order to Mon – Sun.
I have grouped the days of the week the item was bought using:
df12 = df.groupby('Weekday Bought').count().sort_values(['Paid'], ascending = False)['Paid']
display(df12)
Which returns:
Weekday Bought
Thursday 65
Saturday 63
Monday 58
Friday 56
Tuesday 55
Wednesday 47
Sunday 44
Name: Paid, dtype: int64
I want this displayed in descending order, and a graph being displayed with Weekday Bought on the x axis and counted Paid values on the y axis. I have my MatplotLib/Seaborn code to create a line graph as:
plt.figure(figsize=(15,6))
chart12 = sns.lineplot(x = 'Weekday Bought', y = 'Paid',
data = df12.reset_index(), color = "green")
plt.xlabel('Weekday Bought', size = 12)
plt.ylabel('Number Bought', size = 12)
chart12.set_title('Most Popular Day of Week for Buying',
size = 12)
chart12.set_xticklabels(chart12.get_xticklabels(),
rotation=20)
plt.show()
Which correctly generates a line graph with the correct data on it. I want to adjust this code to display Mon – Sun in order on the x axis. Does anyone know if I could make a list with the days of the week in order, then “plug it in” to my code? Hopefully someone can help me! Thanks!
Note – The Weekday Bought dtype is object
Advertisement
Answer
IIUC, After groupby use reset_index
, and do the custom sorting –
df = df.reset_index()
df.Weekday = pd.Categorical(df.Weekday,
categories=['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday', 'Sunday'],
ordered=True)
df = df.sort_values('Weekday')
OUTPUT:
Weekday Bought
2 Monday 58
4 Tuesday 55
5 Wednesday 47
0 Thursday 65
3 Friday 56
1 Saturday 63
6 Sunday 44