如何将 pandas 中的数据框行排序为从一月到十二月的月份

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

我们如何从 1 月到 12 月对数据框中的以下行进行排序, 目前此数据框按字母顺序排列。

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

您可以使用calender to create a month number integer mapping , then sort the values and reindex:

import calendar
df.reindex(df['Col1'].map({i:e 
        for e,i in enumerate(calendar.month_name)}).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

我们还可以将 Series.date_rangemonth_name()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