【问题标题】:how to sort dataframe rows in pandas wrt to months from Jan to Dec如何将熊猫中的数据框行排序为从一月到十二月的月份
【发布时间】:2020-04-20 14:45:24
【问题描述】:

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

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

【问题讨论】:

  • 感谢@anky_91 的编辑

标签: python pandas pandas-groupby sklearn-pandas pandas-datareader


【解决方案1】:

您可以使用 calender 创建月份数字整数映射,然后对值进行排序并 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

【讨论】:

  • @user10953785 很高兴知道。快乐编码:)
【解决方案2】:

我们还可以将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

【讨论】:

  • 感谢@ansev,您的解决方案也非常有效。
  • 我很乐意提供帮助:)
猜你喜欢
  • 2019-07-31
  • 2021-05-27
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2017-06-14
  • 2022-01-04
  • 2016-05-11
相关资源
最近更新 更多