按正确的顺序对月份名称的pandas数据框进行排序

时间:2014-11-27 21:46:39

标签: python pandas

我有一个名为一年中几个月的数据框,即。 1月,2月,3月等

我希望先按月对数据进行排序,然后按类别进行排序,使其看起来像

Month_Name | Cat
Jan          1
Jan          2
Jan          3
Feb         1
Feb          2
Feb         3

2 个答案:

答案 0 :(得分:1)

pandas不为您执行自定义排序功能,但您可以轻松添加一个临时列,该列是月份的索引,然后按该排序

months = {datetime.datetime(2000,i,1).strftime("%b"): i for i in range(1, 13)}
df["month_number"] = df["month_name"].map(months)
df.sort(columns=[...])

您可能希望利用pandas'但是,在您的数据框中读取时,请记录好日期:如果您将日期存储为日期而不是字符串月份名称,那么您将能够按原样对它们进行排序。

答案 1 :(得分:0)

使用 Sort_Dataframeby_MonthandNumeric_cols 功能按月和数字列对数据进行排序:

您需要安装两个软件包,如下所示。

pip install sorted-months-weekdays
pip install sort-dataframeby-monthorweek

示例:

import pandas as pd

from sorted_months_weekdays import *

from sort_dataframeby_monthorweek import *

df = pd.DataFrame([['Jan',23],['Jan',16],['Dec',35],['Apr',79],['Mar',53],['Mar',12],['Feb',3]], columns=['Month','Sum'])
df
Out[11]: 
  Month  Sum
0   Jan   23
1   Jan   16
2   Dec   35
3   Apr   79
4   Mar   53
5   Mar   12
6   Feb    3

要按月和数字列获取已排序的数据,我已使用上述函数。

Sort_Dataframeby_MonthandNumeric_cols(df = df, monthcolumn='Month',numericcolumn='Sum')
Out[12]: 
  Month  Sum
0   Jan   16
1   Jan   23
2   Feb    3
3   Mar   12
4   Mar   53
5   Apr   79
6   Dec   35