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_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_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",但我真的不确定该怎么做。请确保您事先进行了排序。
我有一个 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_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_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",但我真的不确定该怎么做。请确保您事先进行了排序。