鉴于一些参考日期,试图找到下一个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循环,工作日肯定与月份不同。
答案 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))