是否有规范/简单的方法将日期/日期列表映射到大熊猫的下周一?例如。给出7天的清单,返回7天的列表,其中星期一保持不变,星期二和星期日映射到下一个星期一
你可以使用Week offset:
In [11]: days = pd.date_range('2019-01-01', '2019-01-31')
In [12]: days + pd.offsets.Week(weekday=0)
Out[12]:
DatetimeIndex(['2019-01-07', '2019-01-07', '2019-01-07', '2019-01-07',
'2019-01-07', '2019-01-07', '2019-01-14', '2019-01-14',
'2019-01-14', '2019-01-14', '2019-01-14', '2019-01-14',
'2019-01-14', '2019-01-21', '2019-01-21', '2019-01-21',
'2019-01-21', '2019-01-21', '2019-01-21', '2019-01-21',
'2019-01-28', '2019-01-28', '2019-01-28', '2019-01-28',
'2019-01-28', '2019-01-28', '2019-01-28', '2019-02-04',
'2019-02-04', '2019-02-04', '2019-02-04'],
dtype='datetime64[ns]', freq=None)
修复星期一:
In [13]: days + pd.offsets.Week(weekday=0, n=0)
Out[13]:
DatetimeIndex(['2019-01-07', '2019-01-07', '2019-01-07', '2019-01-07',
'2019-01-07', '2019-01-07', '2019-01-07', '2019-01-14',
'2019-01-14', '2019-01-14', '2019-01-14', '2019-01-14',
'2019-01-14', '2019-01-14', '2019-01-21', '2019-01-21',
'2019-01-21', '2019-01-21', '2019-01-21', '2019-01-21',
'2019-01-21', '2019-01-28', '2019-01-28', '2019-01-28',
'2019-01-28', '2019-01-28', '2019-01-28', '2019-01-28',
'2019-02-04', '2019-02-04', '2019-02-04'],
dtype='datetime64[ns]', freq=None)
注意:您可以为不同的工作日使用不同的数字(例如,周二为2),您也可以减去前一个星期一。
使用np.where
和weekday
s=pd.Series(pd.date_range(start='2019-02-11',periods=7))
s=pd.Series(np.where(s.dt.weekday!=0,s+pd.to_timedelta(7-s.dt.weekday,'D'),s))
s
0 2019-02-11
1 2019-02-18
2 2019-02-18
3 2019-02-18
4 2019-02-18
5 2019-02-18
6 2019-02-18
dtype: datetime64[ns]
可能有更好的方法来做到这一点,但查看Timestamps的文档,看起来你可以做类似的事情
my_timestamp += datetime.timedelta(days=(7 - my_timestamp.weekday())%7)