Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按正确顺序对月份名称的数据帧进行排序_Python_Pandas - Fatal编程技术网

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

Python 按正确顺序对月份名称的数据帧进行排序,python,pandas,Python,Pandas,我有一个数据框,其中有一年中月份的名称,即一月、二月、三月等 我想先按月份对数据进行排序,然后按类别对数据进行排序 Month_Name | Cat Jan 1 Jan 2 Jan 3 Feb 1 Feb 2 Feb 3 pandas不为您提供自定义排序功能,但您可以轻松添加一个临时列(该列是该月的索引),然后按该列进行排序 months = {datetime.datetime(2000,

我有一个数据框,其中有一年中月份的名称,即一月、二月、三月等

我想先按月份对数据进行排序,然后按类别对数据进行排序

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

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=[...])

但是,在读取数据帧时,您可能希望利用良好的日期解析功能:如果您将日期存储为日期而不是字符串月份名称,那么您就可以按日期进行本机排序。

使用sort\u Dataframeby\u MonthandNumeric\u 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

谢谢Katrielex,所以我最好从2014-11-30这样的日期开始,然后在此基础上创建一个新专栏。是否可以按日期列排序,但在笔记本中显示数据时将其隐藏。因此,如果我有两列,一列是日期,另一列是月份名称,你能说“按日期排序,只显示月份名称吗?为什么不按完整的日期列排序,然后用月份名称创建另一列来显示呢?是的,只需
print df[columns]
而不是
print df