繁体   English   中英

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

[英]How can I make pandas treat the start of the next business day as the next time after the previous business day?

我有金融交易数据(带有交易时间的时间戳,因此存在重复的时间,并且日期时间的间隔不规则)。 基本上,我在pandas数据框中只有一个datetime列和一个price列,并且已经计算了收益率,但是我想对数据进行线性插值,以便可以每秒,每分钟,每天等获取价格估算值。 。

似乎最好的方法是将周二的开始视为在周一结束之后,因此基本上可以在两天之间的时间间隔内消除。 熊猫提供了一种简便的方法吗? 我已经搜索了文档并找到了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

抱歉,仍然不清楚。 我只想找到一种方法将一个交易日的末尾缝合到下一个交易日的末尾,同时又不丢失实际的日期时间信息。

您应该使用熊猫重采样:

df=df.resample("D")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM