我有一个带有日期时间列的Pandas数据帧。我的问题如下:
我的开始日期是2014年8月4日。从那时起,我计算了16周的时间。因此,从2014年8月4日到2014年8月11日,它将是第1周。在16周之后,它将从第1周开始。我想创建一个新列,它将找到当前块的周基于日期时间列。
这就是我所做的,但它似乎无法正常工作。
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 :(得分:1)
如果您需要16周期的一周,则需要模数,而不是偏差。所以改变" /"到"%"。并在此之前获取int()。
df['WeekChunk'] = int(((df['DateTimeColumn'] - startingweek) / pd.offsets.Day(1))/7) % 16
P.S。但第一周将是0,而不是1。
答案 1 :(得分:0)
这是一种使用内置numpy / pandas时间序列功能而不使用模运算符的方法:
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