如何将pandas wrt中的数据帧行排序为一月到月

2024-10-01 11:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我们如何将数据帧中的以下行按月份(从一月到十二月)排序, 目前这个数据帧是按字母顺序排列的

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

Tags: 数据排序字母col2col3col1月份august
2条回答

您可以使用^{}创建一个月数整数映射,然后对值进行排序,然后使用^{}

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

我们也可以将^{}month_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

相关问题 更多 >