2015-11-03 96 views
2

給出一個pandas.Series存儲時間戳,如每週的任何一天:截斷日期上週一或蟒蛇

In [14]: x 
Out[14]: 
0 2015-11-03 
1 2015-11-17 
2 2015-12-08 
3 2015-12-22 
4 2016-01-05 
dtype: datetime64[ns] 

我想截斷的日期,以便我只有每個時間戳

的最後一個星期一
In [14]: x 
Out[14]: 
0 2015-11-02 
1 2015-11-16 
2 2015-12-07 
3 2015-12-21 
4 2016-01-04 
dtype: datetime64[ns] 

回答

5

可以使用dt.dayofweek屬性爲Monday是0天星期大於這將導致timedeltas相當於數的任何一天構建一個TimedeltaIndex減去的天數:

In [49]: 
s = s - pd.TimedeltaIndex(s.dt.dayofweek, unit='D') 
s 

Out[49]: 
index 
0 2015-11-02 
1 2015-11-16 
2 2015-12-07 
3 2015-12-21 
4 2016-01-04 
Name: date, dtype: datetime64[ns] 

例如,對於2015-11-05,2015-11-04,2015-11-03,2015-11-02pd.TimedeltaIndex(s.dt.dayofweek, unit='D')的輸出分別是3 days,2 days,1 days,0 days

+0

請小心輸入錯誤,原始答案有'units ='D''而不是'unit ='D'',它被默默地忽略,pandas使用微秒單位的默認值。這只是與紀堯姆的例子重合,減少幾納秒將時間戳移動到23:59,並以某種方式仍然給出正確的結果。 –

+0

@ H.Brandsmeier感謝您指出,這是一個微妙的錯字錯誤 – EdChum