是否有一种规范/简便的方法将日期/日期列表映射到大熊猫各自的下周一? 例如。给定7天的列表,请返回7天的列表,其中星期一保持不变,星期二至星期日映射到下一个星期一
答案 0 :(得分:3)
您可以使用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),也可以减去以得到前一个星期一。
答案 1 :(得分:1)
将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]
答案 2 :(得分:0)
也许有更好的方法,但是查看Timestamps的文档,看来您可以做类似的事情
my_timestamp += datetime.timedelta(days=(7 - my_timestamp.weekday())%7)