Pandas 时间序列 - 将与上一列的差异添加到新行

Pandas Time Series - Add difference from previous column to New Row

我有一个 DataFrame,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_price 获取差异列并将其从 Close_x 列中减去:

Df['ES_difference'] = Df['Close_x'].diff()

这就是我制作 ES_difference 专栏的方式。现在我想要一个新列 ES_Inverse_priceClose_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_Inverse_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_p ticker difference ES_Inverse Price
0 100 aapl NaN NaN
1 102 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

除非您提供您正在寻找的值,否则我不确定我是否完全理解,但也许就是这样?

df['ES_Inverse_price'] = df['Close_x'].shift(1) - df['ES_difference']

正在处理一些非常粗糙的数据(我在复制你的数据时遇到了问题):

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

我不会考虑将 iloc[0,0] 的所有内容都设为 "safe",但我真的不确定该怎么做。请确保您事先进行了排序。