Python 3.x 如何从每日收益中计算价格?
我有一个每日返回的数据框。我想添加另一列,其中包含基于每日回报计算的价格序列。 这是数据帧:Python 3.x 如何从每日收益中计算价格?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个每日返回的数据框。我想添加另一列,其中包含基于每日回报计算的价格序列。 这是数据帧: date daily 0 2020-09-01 0.0000 1 2020-09-02 0.0012 2 2020-09-03 -0.0005 3 2020-09-04 -0.0004 4 2020-09-07 0.0032 5 2020-09-08 -0.0015 6 2020-09-09 0.0005 7 2020-09-10 0.0003 8 20
date daily
0 2020-09-01 0.0000
1 2020-09-02 0.0012
2 2020-09-03 -0.0005
3 2020-09-04 -0.0004
4 2020-09-07 0.0032
5 2020-09-08 -0.0015
6 2020-09-09 0.0005
7 2020-09-10 0.0003
8 2020-09-11 0.0001
9 2020-09-14 0.0043
10 2020-09-15 0.0037
11 2020-09-16 -0.0008
这是我想添加的价格栏:
prices
0 100.000000
1 100.120000
2 100.069940
3 100.029912
4 100.350008
5 100.199483
6 100.249582
7 100.279657
8 100.289685
9 100.720931
10 101.093598
11 101.012724
我尝试在“daily”列上循环,然后计算价格,但我没有将新值保留到列表prz中
prz= []
for row in df['daily']:
prz.append(100 *(1+row))
首先添加
1
,然后使用并最后乘以100
,以将第一个NaN
替换为0
:
df['prices'] = df['daily'].add(1).cumprod().mul(100)
df['back'] = df['prices'].pct_change().fillna(0)
print (df)
date daily prices back
0 2020-09-01 0.0000 100.000000 0.0000
1 2020-09-02 0.0012 100.120000 0.0012
2 2020-09-03 -0.0005 100.069940 -0.0005
3 2020-09-04 -0.0004 100.029912 -0.0004
4 2020-09-07 0.0032 100.350008 0.0032
5 2020-09-08 -0.0015 100.199483 -0.0015
6 2020-09-09 0.0005 100.249582 0.0005
7 2020-09-10 0.0003 100.279657 0.0003
8 2020-09-11 0.0001 100.289685 0.0001
9 2020-09-14 0.0043 100.720931 0.0043
10 2020-09-15 0.0037 101.093598 0.0037
11 2020-09-16 -0.0008 101.012724 -0.0008
您也可以在此处使用:
@Ig_Ferr的答案对你有用吗?
In [1349]: import numpy as np
In [1350]: df['prices'] = np.cumproduct(df.daily + 1) * 100
In [1351]: df
Out[1351]:
date daily prices
0 2020-09-01 0.0000 100.000000
1 2020-09-02 0.0012 100.120000
2 2020-09-03 -0.0005 100.069940
3 2020-09-04 -0.0004 100.029912
4 2020-09-07 0.0032 100.350008
5 2020-09-08 -0.0015 100.199483
6 2020-09-09 0.0005 100.249582
7 2020-09-10 0.0003 100.279657
8 2020-09-11 0.0001 100.289685
9 2020-09-14 0.0043 100.720931
10 2020-09-15 0.0037 101.093598
11 2020-09-16 -0.0008 101.012724