你知道吗 我有一些timeseries数据,基本上包含了价格变化的信息。例如,假设:
df = pd.DataFrame(columns = ['TimeStamp','PercPriceChange'])
df.loc[:,'TimeStamp']=[1457280,1457281,1457282,1457283,1457284,1457285,1457286]
df.loc[:,'PercPriceChange']=[0.1,0.2,-0.1,0.1,0.2,0.1,-0.1]
所以df看起来像
TimeStamp PercPriceChange
0 1457280 0.1
1 1457281 0.2
2 1457282 -0.1
3 1457283 0.1
4 1457284 0.2
5 1457285 0.1
6 1457286 -0.1
我想要实现的是在涨跌连续结束之前计算总价格变化,并将值存储在连续开始的行中。也就是说,我想要的是“TotalPriceChange”列:
TimeStamp PercPriceChange TotalPriceChange
0 1457280 0.1 1.1 * 1.2 - 1 = 0.31
1 1457281 0.2 0
2 1457282 -0.1 -0.1
3 1457283 0.1 1.1 * 1.2 * 1.1 - 1 = 0.452
4 1457284 0.2 0
5 1457285 0.1 0
6 1457286 -0.1 -0.1
我可以使用以下方法确定起点:
df['turn'] = 0
df['PriceChange_L1'] = df['PercPriceChange'].shift(periods=1, freq=None, axis=0)
df.loc[ df['PercPriceChange'] * df['PriceChange_L1'] < 0, 'turn' ] = 1
得到
TimeStamp PercPriceChange turn
0 1457280 0.1 NaN or 1?
1 1457281 0.2 0
2 1457282 -0.1 1
3 1457283 0.1 1
4 1457284 0.2 0
5 1457285 0.1 0
6 1457286 -0.1 1
考虑到这个专栏的“转折点”,我需要帮助继续我的探索(或者我们根本不需要这个“转折点”)。我非常确定我可以编写一个嵌套for循环,逐行遍历整个数据帧,计算我需要的内容并填充“TotalPriceChange”列,但是考虑到我计划在一个相当大的数据集上执行此操作(考虑几年的分钟或小时数据),我认为嵌套for循环将非常缓慢。你知道吗
因此,我只想和你们的专家核实一下,看看是否有任何有效的解决我的问题的办法,我不知道。任何帮助都将不胜感激!你知道吗
谢谢!你知道吗
您要查找的计算看起来像groupby/product操作。 要设置groupby操作,我们需要为每一行分配一个
group
值。取turn
列的累积和得到所需的结果:现在我们可以将
TotalPriceChange
列定义为收益率
相关问题 更多 >
编程相关推荐