熊猫时间序列 - 将以前列的差异添加到新行

时间:2017-05-27 22:31:46

标签: python pandas dataframe time series

我有一个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

1 个答案:

答案 0 :(得分: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]的所有内容都设置为“安全”,但我不确定如何做到这一点。确保你事先进行分类。