Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫时间序列-将上一列的差异添加到新行_Python_Pandas_Dataframe_Time_Series - Fatal编程技术网

Python 熊猫时间序列-将上一列的差异添加到新行

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/

我有一个数据帧,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/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