Search code examples
pythonpandaspandas-groupbysklearn-pandaspandas-datareader

how to sort dataframe rows in pandas wrt to months from Jan to Dec


How can we sort the below rows in dataframe wrt to month from Jan to Dec, currently this dataframe is in alphabetical order.

0     Col1     Col2                 Col3  ...    Col22  Col23      Col24
1       April  53.0                 0.0  ...      11.0  0.0          0.0
2      August  43.0                 0.0  ...      11.0  3.0          5.0
3    December  36.0                 0.0  ...       4.0  1.0          0.0
4    February  48.0                 0.0  ...      16.0  0.0          0.0
5     January  55.0                 0.0  ...      24.0  4.0          0.0
6        July  45.0                 0.0  ...       4.0  8.0          1.0
7        June  34.0                 0.0  ...       4.0  8.0          1.0
8       March  34.0                 2.0  ...      24.0  4.0          1.0
9         May  52.0                 1.0  ...       3.0  2.0          1.0
10   November  33.0                 0.0  ...       7.0  2.0          3.0
11    October  21.0                 1.0  ...       7.0  1.0          2.0
12  September  27.0                 0.0  ...       5.0  3.0          3.0

Solution

  • We can also use Series.date_range with month_name() and month:

    month = pd.date_range(start='2018-01', freq='M', periods=12)
    df.loc[df['Col1'].map(dict(zip(month.month_name(),month.month))).sort_values().index]
    
             Col1  Col2  Col3  Col22  Col23  Col24
    5     January  55.0   0.0   24.0    4.0    0.0
    4    February  48.0   0.0   16.0    0.0    0.0
    8       March  34.0   2.0   24.0    4.0    1.0
    1       April  53.0   0.0   11.0    0.0    0.0
    9         May  52.0   1.0    3.0    2.0    1.0
    7        June  34.0   0.0    4.0    8.0    1.0
    6        July  45.0   0.0    4.0    8.0    1.0
    2      August  43.0   0.0   11.0    3.0    5.0
    12  September  27.0   0.0    5.0    3.0    3.0
    11    October  21.0   1.0    7.0    1.0    2.0
    10   November  33.0   0.0    7.0    2.0    3.0
    3    December  36.0   0.0    4.0    1.0    0.0