I have the following df data frame in pandas:
JavaScript
x
9
1
weekday venta_total_cy
2
0 Viernes 5.430211e+09
3
1 Lunes 3.425554e+09
4
2 Sabado 6.833202e+09
5
3 Domingo 6.566466e+09
6
4 Jueves 2.748710e+09
7
5 Martes 3.328418e+09
8
6 Miercoles 3.136277e+09
9
What I want to do is to order the data frame by the following days’ order:
JavaScript
1
9
1
weekday
2
Lunes
3
Martes
4
Miercoles
5
Jueves
6
Viernes
7
Sabado
8
Domingo
9
To do so, I used the following code:
JavaScript
1
2
1
df['weekday'] = pd.Categorical(df[['weekday']], categories=["Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"])
2
When I run the code, I get this error:
JavaScript
1
2
1
ValueError: Cannot setitem on a Categorical with a new category, set the categories first
2
I have not found enough documentation to resolve this. Can you help me? Thanks!
Advertisement
Answer
df[['weekday']]
returns a dataframe, which is incorrect. Convert the series column to categorical instead. Also, use the ordered=True
argument to establish order in your categorical column.
JavaScript
1
16
16
1
categories = np.array(
2
['Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'])
3
4
df['weekday'] = pd.Categorical(
5
df['weekday'], categories=categories, ordered=True)
6
df.sort_values(by='weekday')
7
8
weekday venta_total_cy
9
1 Lunes 3.425554e+09
10
5 Martes 3.328418e+09
11
6 Miercoles 3.136277e+09
12
4 Jueves 2.748710e+09
13
0 Viernes 5.430211e+09
14
2 Sabado 6.833202e+09
15
3 Domingo 6.566466e+09
16