2015-12-24 22 views
0

我有一個帶有日期時間列的Pandas數據框。我的問題如下:查找Python Pandas經過了多少個星期

我有一個開始日期04/08/2014。從那以後,我以16個星期的大塊計數幾周。因此,從2014年8月4日至2014年8月11日,這將是第1周.16周後,它將從第1周再次開始。我想創建一個新列,以查找當前塊的周基於datetime列。

這是我所做的,但它似乎不工作,因爲它應該。

startingweek = datetime.date(2014, 8, 4) 

df['WeekChunk'] = int(((df['DateTimeColumn'] - startingweek)/pd.offsets.Day(1))/7/16) 

我計算兩天之間的天數,然後在7天以上劃分找到週數,然後除以16,找到大塊的一週。

如果我使用2015年12月23日的日期,應該是第9周。但是,上面的代碼看起來不對。

+0

你'df'不定義。你應該發佈[MVCE](http://stackoverflow.com/help/mcve) – TomAugspurger

回答

1

如果你需要在16週期間的一週,你需要模,而不是devision。所以把「/」改成「%」。在此之前得到int()。

df['WeekChunk'] = int(((df['DateTimeColumn'] - startingweek)/pd.offsets.Day(1))/7) % 16 

P.S.但第一週將是0,而不是1

0

這是一種使用內置的numpy的/大熊貓的時間序列的功能,而無需使用模運算符來做到這一點:

import pandas as pd 
import numpy as np 

# re-create a dummy df with a Date column for this example 
startingweek = datetime.date(2014, 8, 4) 
df = pd.DataFrame(pd.date_range(startingweek, periods=1000, freq='D'), columns=['Date']) 

# calc the WeekChunks by recasting the differences into timedelta periods 
df['WeekChunks'] = 1 + (df.Date-startingweek).astype(np.timedelta64(1,'W')) 
        - (df.Date-startingweek).astype(np.timedelta64(1,'16W'))*16 

# find Dec 23, 2015...should be WeekChunks = 9 
df.set_index('Date').ix['2015-12-23'] 

WeekChunks 9 
Name: 2015-12-23 00:00:00, dtype: float64 
相關問題