熊猫映射到下周的星期一

问题描述 投票:3回答:3

是否有规范/简单的方法将日期/日期列表映射到大熊猫的下周一?例如。给出7天的清单,返回7天的列表,其中星期一保持不变,星期二和星期日映射到下一个星期一

python pandas
3个回答
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
投票

使用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]

0
投票

可能有更好的方法来做到这一点,但查看Timestamps的文档,看起来你可以做类似的事情

my_timestamp += datetime.timedelta(days=(7 - my_timestamp.weekday())%7)
© www.soinside.com 2019 - 2024. All rights reserved.