在给定日期之后获得随后的Jan / May / Sep的Pythonic方式

时间:2018-04-08 08:12:16

标签: python datetime date-arithmetic

鉴于一些参考日期,试图找到下一个1月,5月,9月,例如2016-02之后的下一个相关日期应为2016-05。

当前为我工作的方式(不是pythonic)看起来像:

def rel_month(dt):
    rel_mon = [1, 5, 9]
    ref_dt = pd.Timestamp(dt)
    idx = pd.DatetimeIndex(start=ref_dt, end=ref_dt + pd.Timedelta('122D'), freq='M')
    return idx[idx.month.isin(rel_mon)][0].strftime('%Y-%m')

在大多数情况下,我们可以使用for循环来解决任何问题。但我们试图在这里避免循环,因此标题为“pythonic”。没有for循环,工作日肯定与月份不同。

1 个答案:

答案 0 :(得分:1)

Pythonic是最简单的方法,易于阅读。所以这可能是略微pythonic。

import pandas as pd
def rel_month(dt):
    #assign fitting month to each month (
    rel_mon = {1:1,2:5,3:5,4:5,5:5,6:9,7:9,8:9,9:9,10:1,11:1,12:1}
    ref_dt = pd.Timestamp(dt)
    month = ref_dt.month
    new_month = rel_mon[month]

    # maybe change year
    year = ref_dt.year
    if month > 9:
        year += 1
    #returns formatted string
    return '{}-{}'.format(year,str(new_month).zfill(2))