假设我有一个列表:
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_datetime
与sorted
一起使用:
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')