代码之家  ›  专栏  ›  技术社区  ›  Spinor8

月中和月末的大熊猫日期范围

  •  0
  • Spinor8  · 技术社区  · 5 年前

    我可以使用

    import pandas as pd
    monthend_range = pd.date_range(datetime.date(2017,12,10), datetime.date(2018,2,2), freq='BM')
    

    是否有一个简单的方法将月中纳入上述范围以形成月中和月末指数?假设我们要使用的逻辑是在上面的代码中使用连续的月份结束符,并找到正好位于月份中间的工作日。如果这不是工作日,请尝试第二天和第二天,直到我们得到一个工作日。

    预期输出为

    ['2017-12-29', '2018-01-16', '2018-01-31']
    

    这似乎有点不一致,因为2017-12-15是在日期范围内的月中。但程序是先得到月底,然后在月底之间插入。当然,除非有更好的方法来处理这个问题。

    0 回复  |  直到 5 年前
        1
  •  0
  •   jezrael    5 年前

    想法是为每个值创建工作日范围,先省略,然后在中间选择值,最后使用 Index.union 对于join togetehr:

    a = [] 
    for x in monthend_range[1:]:
        r = pd.date_range(x.to_period('m').to_timestamp(), x, freq='B')
        a.append(r[len(r)//2])
    print (a)
    [Timestamp('2018-01-16 00:00:00', freq='B')]
    
    out = monthend_range.union(a)
    print (out)           
    DatetimeIndex(['2017-12-29', '2018-01-16', '2018-01-31'], dtype='datetime64[ns]', freq=None)