按年份和季度对日期列表进行排序



假设我有一个列表:

Date = ['2015-Q1, '2013-Q4', '2017-Q2', '2018-Q1']

我怎样才能按时间顺序对其进行排序,以便:

Date = ['2013-Q4','2015-Q1','2017-Q2','2018-Q1']

通过使用natsort
natsort 提供了一个函数 natsort 帮助"自然地"对列表进行排序("自然"的定义相当不明确,但一般来说,它意味着基于含义而不是计算机代码点进行排序(

import natsort
natsort.natsorted(Date)
Out[103]: ['2013-Q4', '2015-Q1', '2017-Q2', '2018-Q1']
您可以将

pandas.to_datetimesorted一起使用:

import pandas as pd
date = ['2015-Q1', '2013-Q4', '2017-Q2', '2018-Q1']
res = sorted(date, key=pd.to_datetime)

结果:

print(res)
['2013-Q4' '2015-Q1' '2017-Q2' '2018-Q1']

这些是句点。您需要生成一个周期索引,然后调用 sort_values

p = pd.PeriodIndex(['2013-Q4','2015-Q1','2017-Q2','2018-Q1'], freq='Q')    
p.sort_values() # p = p.sort_values() # np.sort(p)

PeriodIndex(['2013Q4', '2015Q1', '2017Q2', '2018Q1'], dtype='period[Q-DEC]', freq='Q-DEC')
import pandas as pd    
pd.to_datetime(Date).sort_values().to_period('Q')

输出:

PeriodIndex(['2013Q4', '2015Q1', '2017Q2', '2018Q1'], dtype='period[Q-DEC]', freq='Q-DEC')

或者像这样,如果你想让它回到字符串:

pd.to_datetime(Date).sort_values().to_period('Q').strftime('%Y-Q%q')
array(['2013-Q4', '2015-Q1', '2017-Q2', '2018-Q1'], dtype='<U6')

最新更新