【问题标题】:Sort list of dates by year & quarter按年份和季度对日期列表进行排序
【发布时间】:2018-10-01 08:48:44
【问题描述】:

假设我有一个列表:

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

我怎样才能将它按时间顺序排序:

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

【问题讨论】:

  • 这被标记为pandas,但问题只涉及list。你能澄清一下你的输入和输出的格式吗?您是否对使用 3rd 方库感到满意?
  • 该格式的性质意味着sorted(Date) 应该始终有效。

标签: python python-3.x list pandas sorting


【解决方案1】:

【讨论】:

  • 不错的答案,这将是“自然”的答案;-) 但是,这些字符串有一些特别之处。
  • @cᴏʟᴅsᴘᴇᴇᴅ 我会说使用熊猫更安全:-)
【解决方案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')

【讨论】:

    【解决方案3】:

    您可以将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']
    

    【讨论】:

    • 非常直接。
    【解决方案4】:
    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多