Sort by certain order (Situation: pandas DataFrame Groupby)
<p>I want to change the day of order presented by below code.<br>
What I want is a result with the order (Mon, Tue, Wed, Thu, Fri, Sat, Sun) <br> - should I say, sort by key in certain predefined order?</p>

<hr>

<p>Here is my code which needs some tweak:</p>

<pre><code>f8 = df_toy_indoor2.groupby(['device_id', 'day'])['dwell_time'].sum()

print(f8)
</code></pre>

<p>Current result:</p>

<pre><code>device_id                         day
device_112                        Thu     436518
                                  Wed     636451
                                  Fri     770307
                                  Tue     792066
                                  Mon     826862
                                  Sat     953503
                                  Sun    1019298
device_223                        Mon    2534895
                                  Thu    2857429
                                  Tue    3303173
                                  Fri    3548178
                                  Wed    3822616
                                  Sun    4213633
                                  Sat    4475221
</code></pre>

<p>Desired result:</p>

<pre><code>device_id                         day
device_112                        Mon     826862  
                                  Tue     792066
                                  Wed     636451 
                                  Thu     436518
                                  Fri     770307
                                  Sat     953503
                                  Sun    1019298
device_223                        Mon    2534895
                                  Tue    3303173
                                  Wed    3822616
                                  Thu    2857429
                                  Fri    3548178
                                  Sat    4475221
                                  Sun    4213633
</code></pre>

<hr>

<p>Here, <code>type(df_toy_indoor2.groupby(['device_id', 'day'])['dwell_time'])</code> is a class 'pandas.core.groupby.SeriesGroupBy'.</p>

<p>I have found <code>.sort_values()</code> , but it is a built-in sort function by values. <br>
 I want to get some pointers to set some order to use it further data manipulation.<br>
Thanks in advance.</p>

<p>Took me some time, but I found the solution. <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.reindex.html#pandas.Series.reindex" rel="nofollow">reindex</a> does what you want. See my code example:</p>

<pre><code>a = [1, 2] * 2 + [2, 1] * 3 + [1, 2]
b = ['Mon', 'Wed', 'Thu', 'Fri'] * 3
c = list(range(12))
df = pd.DataFrame(data=[a,b,c]).T
df.columns = ['device', 'day', 'value']
df = df.groupby(['device', 'day']).sum()
</code></pre>

<p>gives:</p>

<pre><code>            value
device day       
1      Fri      7
       Mon      0
       Thu     12
       Wed     14
2      Fri     14
       Mon     12
       Thu      6
       Wed      1
</code></pre>

<p>Then doing reindex:</p>

<pre><code>df.reindex(['Mon', 'Wed', 'Thu', 'Fri'], level='day')
</code></pre>

<p>or more conveniently (credits to burhan)</p>

<pre><code>df.reindex(list(calendar.day_abbr), level='day')
</code></pre>

<p>gives:</p>

<pre><code>            value
device day       
1      Mon      0
       Wed     14
       Thu     12
       Fri      7
2      Mon     12
       Wed      1
       Thu      6
       Fri     14
</code></pre>

python sorting pandas