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>If you sort the dataframe prior to the <code>groupby</code>, pandas will maintain the order of your sort. First thing you'll have to do is come up with a good way to sort the days of the week. One way of doing that is to assign an int representing the day of the week to each row, then sort on that column. For example:</p>

<pre><code>import pandas

df = pandas.DataFrame(
    columns=['device_id', 'day', 'dwell_time'], 
    data=[[1, 'Wed', 35], [1, 'Mon', 63], [2, 'Sat', 83], [2, 'Fri', 82]]
)

df['day_of_week'] = df.apply(
    lambda x: ['Mon', 'Tues', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'].index(x.day), 
    1
)

print(df.sort(['device_id', 'day_of_week']).groupby(['device_id', 'day'])['dwell_time'].sum())
</code></pre>

<p>yields:</p>

<pre><code>device_id  day    dwell_time
1          Mon    63
           Wed    35
2          Fri    82
           Sat    83
</code></pre>

python sorting pandas