熊猫映射到下周的星期一

时间:2019-02-15 01:40:27

标签: python pandas

是否有一种规范/简便的方法将日期/日期列表映射到大熊猫各自的下周一? 例如。给定7天的列表,请返回7天的列表,其中星期一保持不变,星期二至星期日映射到下一个星期一

3 个答案:

答案 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.whereweekday一起使用

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)