如何让熊猫将下一个工作日的开始视为上一个工作天后的下一个时间



我有金融交易数据(时间戳上交易时间,所以有重复的时间,日期时间间隔不规则)。基本上,我在pandas数据帧中只有一个日期时间列和一个价格列,我已经计算了回报,但我想线性插值数据,这样我就可以获得每秒钟、每分钟、每天等的价格估计…

似乎最好的方法是将周二的开始视为发生在周一结束之后,因此基本上是在两天之间的时间进行调整。熊猫能提供一种简单的方法吗?我搜索了文档并找到了BDay,但这似乎并不是我想要的。

编辑:这是我的代码示例:

df = read_csv(filePath,usecols=[0,4]) #column 0 is date_time and column 4 is price
df.date_time = pd.to_datetime(df.date_time,format = '%m-%d-%Y %H:%M:%S.%f') 
def get_returns(df):
return np.log(df.Price.shift(1) / df.Price)

但我的问题是,这是交易数据,所以我有一段时间内某只股票的每一笔交易,交易只发生在一个交易日(上午9:30至下午4点),数据带有时间戳。我可以取每一笔交易的价格,并制作一个价格序列,但当我计算峰度和其他风格化的事实时,我会得到非常奇怪的结果,因为这些统计数据通常是在均匀间隔的时间序列数据上运行的。

我开始做的是编写代码来线性插值我的数据,这样我就可以每10秒、每分钟、每10分钟、每小时、每天等得到一次价格。然而,由于工作日、周末、节假日以及所有无法进行交易的时间,我想让python认为唯一存在的时间是在工作日,这样我的真实世界时间仍然与正确的日期时间相匹配,但不是说我需要一个交易结束时所有时间的价格戳。

def lin_int_tseries(series, timeChange):
tDelta = datetime.timedelta(seconds=timeChange)
data_times = series['date_time']
new_series = []
sample_times = []
sample_times.append(data_times[0])
while max(sample_times) < max(data_times):
sample_times.append(sample_times[-1] + tDelta)
for position,time in enumerate(sample_times):
try: 
ind = data_times.index(time)
new_series.append(series[ind])
except:
t_next = getnextTime(time,data_times) #get next largest timestamp in data
t_prev = getprevTime(time,data_times) #get next smallest timestamp in data
ind_next = data_times.index(t_next) #index of next largest timestamp
ind_prev = data_times.index(t_prev) #index of next smallest timestamp
p_next = series[ind_next][1] #price at next timestamp
p_prev = series[ind_prev][1] #price a prev timestamp
omega = (float(time) - t_prev)/(t_next - t_prev) #linear interpolation
p_interp = (1 - omega)*p_prev + omega*p_next
new_series.append([time,p_interp])
return new_series

很抱歉,如果还不清楚。我只想找到一些方法,将一个交易日的结束缝合到下一个交易天的开始,同时不丢失实际的日期时间信息。

您应该使用pandas重采样:

df=df.resample("D")

相关内容

最新更新