Python 熊猫时间序列-将上一列的差异添加到新行
我有一个数据帧,DF:Python 熊猫时间序列-将上一列的差异添加到新行,python,pandas,dataframe,time,series,Python,Pandas,Dataframe,Time,Series,我有一个数据帧,DF: Ticker_x Date Close_x ES_difference 0 ES H7 10/18/2016 13:44 2128 1 ES H7 10/18/2016 13:59 2128.75 0.75 2 ES H7 10/18/2016 14:14 2125.75 -3 3 ES H7 10/18/2016 14:29 2126.5 0.75 4 ES H7 10/18/
Ticker_x Date Close_x ES_difference
0 ES H7 10/18/2016 13:44 2128
1 ES H7 10/18/2016 13:59 2128.75 0.75
2 ES H7 10/18/2016 14:14 2125.75 -3
3 ES H7 10/18/2016 14:29 2126.5 0.75
4 ES H7 10/18/2016 14:44 2126.5 0
5 ES H7 10/18/2016 16:14 2126 -0.5
6 ES H7 10/18/2016 16:44 2126.25 0.25
7 ES H7 10/18/2016 17:59 2126.5 0.25
8 ES H7 10/18/2016 18:14 2127 0.5
9 ES H7 10/18/2016 19:14 2127.75 0.75
10 ES H7 10/18/2016 19:44 2127.75 0
11 ES H7 10/18/2016 19:59 2127.75 0
12 ES H7 10/18/2016 20:44 2129 1.25
13 ES H7 10/18/2016 21:29 2128.75 -0.25
14 ES H7 10/18/2016 21:44 2129 0.25
15 ES H7 10/18/2016 22:14 2129.5 0.5
16 ES H7 10/18/2016 22:44 2129.5 0
我正在尝试创建一个新列-ES_Inverse\u price
,它取差列,并从Close\u x
列中减去它:
Df['ES_difference'] = Df['Close_x'].diff()
这就是我如何制作ES_difference
列的方法。现在,我需要一个新列ES_Inverse_price
从Close_x
中获取上一个值,并减去同一行的差异列值:
Df['ES_Inverse_price'] = ''
Df['ES_Inverse_price'][0] = Df['Close_x'][0]
Df['ES_Inverse_price'][1:] = Df['ES_Inverse_price'].shift(1)-Df['ES_difference']
…因此ES_Inverse_price
中的第一行将等于Close_x
中的第一行。这很好,但是现在我想开始减去差分列,为我要创建的ES\u Inverse\u price
列获得一个新值
不幸的是,我在引用带有shift(1)
的代码时遇到以下错误:
TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')
编辑:例如,以第1行为例。不是2128.75,而是2127.25。我从上一行的值中减去“Close_x”(已经确定的值)的差值,而不是将其相加(这将得到2128.75)
编辑:
因此,在下面另一张海报给出的示例中,我要寻找的是:
close\u p ticker差价与反向价格
0 100 aapl楠楠楠
1102AAPL 2.098.0
2 103.4 aapl 1.4 96.6
3 101.2 aapl-2.2 98.8
4 106.2 aapl 5.0 93.8
除非您提供所需的值,否则我不确定是否完全理解,但可能就是这样
df['ES_Inverse_price'] = df['Close_x'].shift(1) - df['ES_difference']
处理一些非常粗糙的数据(我在复制您的数据时遇到困难):
我不认为所有的东西都是“代码”ILOC [0,0] < /代码>是“安全的”,但我不太确定该怎么做。确保您事先进行了排序。因此,在您的情况下,我不会试图减去“Close\u p”上的差值。相反,我试图将差异附加到“ES_Reverse_price”列上。由于差异列被减去,“ES_Reverse_price”列将与“Close_p”(或“Close_x”)列有更大的差异。所以我认为当你在转换(1)代码中使用“Close_p”时,会得到一个不同于我所期望的结果。我在那里有一个差分栏,我只想从新的“ES_Inverse_price”栏的前一个值中减去它,得到新行的值。编辑:谢谢你的评论,我在原始帖子的底部添加了一个我想要的例子。好吧,那么你是从close_x中减去ES_差(下移)?请参见编辑不是从close_x中减去,而是从“ES_Reverse_price”的上一个值中减去。因此,当close_x上升时,ES_Reverse_price将下降相同的幅度。我建议使用可复制的虚拟数据,类似于我放在一起的数据,并手动创建您要查找的列。这样我就能明白了。用我不懂的话来说。
df
close_p ticker
0 100.0 aapl
1 102.0 aapl
2 103.4 aapl
3 101.2 aapl
4 106.2 apple
df['es_difference'] = df['close_p'].diff()
close_p ticker es_difference
0 100.0 aapl NaN
1 102.0 aapl 2.0
2 103.4 aapl 1.4
3 101.2 aapl -2.2
4 106.2 apple 5.0
df['es_inverse_price'] = df['close_p']-df['es_difference'].cumsum() - df['es_difference'].cumsum()
close_p ticker es_difference es_inverse_price
0 100.0 aapl NaN NaN
1 102.0 aapl 2.0 98.0
2 103.4 aapl 1.4 96.6
3 101.2 aapl -2.2 98.8
4 106.2 aapl 5.0 93.8