【发布时间】:2014-11-27 21:46:39
【问题描述】:
我有一个带有一年中月份名称的数据框,即一月、二月、三月等
我想先按月份对数据进行排序,然后按类别排序,这样看起来像
Month_Name | Cat
Jan 1
Jan 2
Jan 3
Feb 1
Feb 2
Feb 3
【问题讨论】:
我有一个带有一年中月份名称的数据框,即一月、二月、三月等
我想先按月份对数据进行排序,然后按类别排序,这样看起来像
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=[...])
您可能希望在读取数据框时利用pandas'良好的日期解析:如果您将日期存储为日期而不是字符串月份名称,那么您将能够按它们进行本地排序。
【讨论】:
print df[columns] 而不是print df
使用 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
【讨论】: