2017-05-27 39 views
-1

我有一個數據幀,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列我試圖做一個新的價值。

不幸的是,我得到參考下錯誤代碼與它的​​:

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32') 

編輯:例如採用而不是被排2128.75 1,這將是2127.25。我從前一行的值中減去'Close_x'(已經是一個確定的值)的差異,而不是增加它(這會給我2128.75)。

編輯:

所以在下面通過另一個海報給出的例子,這裏就是我想要找:

\t close_p \t ticker \t difference \t ES_Inverse Price 
 
0 \t 100 \t aapl \t NaN \t NaN 
 
1 \t 102 \t aapl \t 2.0 \t 98.0 
 
2 \t 103.4 \t aapl \t 1.4 \t 96.6 
 
3 \t 101.2 \t aapl \t -2.2 \t 98.8 
 
4 \t 106.2 \t aapl \t 5.0 \t 93.8

回答

1

我不知道我完全理解除非你提供你正在尋找的值,但也許這是它?

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]是「安全的」,但我真的不知道如何做到這一點。確保你事先分類。

+0

所以我並不想減去你的情況在「Close_p」的區別。相反,我試圖將差異加入到「ES_Inverse_price」列中。由於差異列正在被扣除,因此「ES_Inverse_price」列將逐漸與「Close_p」(或「Close_x」)列有所不同。所以我認爲,當你在shift(1)代碼中使用「Close_p」時,它會得到比我想要的結果不同的結果。我在那裏有差異列,我只是想從新的'ES_Inverse_price'列的前一個值中減去新列的值。 –

+0

編輯:感謝您的評論,我在原帖的底部添加了一個我正在尋找的例子。 –

+0

好吧,你正在從close_x減去es_difference(向下移動)?請參閱編輯 –