假设我有一个清单:
Date = ['2013-Q4','2015-Q1','2017-Q2','2018-Q1']
如何按时间顺序对其进行排序,以便:
svgMap.append("path")
.attr("class", "reg_contour")
.datum(topojson.mesh(fr[0], fr[0].objects.reg_GEN_WGS84_UTF8, function(a, b) { return a !== b; }))
.attr("d", path);
答案 0 :(得分:2)
import natsort
natsort.natsorted(Date)
Out[103]: ['2013-Q4', '2015-Q1', '2017-Q2', '2018-Q1']
答案 1 :(得分:2)
这些是时期。您需要生成PeriodIndex,然后调用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')
答案 2 :(得分:2)
您可以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']
答案 3 :(得分:1)
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')