我想找出收益的累积积。我尝试了以下代码:
df['cumret'] = df.groupby(level=['date','id']).(1 + df.ret).cumprod() - 1
但是,它返回一个错误消息
语法错误:无效语法
任何帮助都将不胜感激
import pandas as pd
data = {'date': ['2014-05-01', '2014-05-01', '2014-05-01', '2014-05-01',
'2014-05-02', '2014-05-02', '2014-05-02', '2014-05-02'
'2014-05-03', '2014-05-03', '2014-05-03', '2014-05-03']
'id': [a, b, c, d, a, b, c, d, a, b, c, d],
'sd': [0.05, 0.01, 0.03 , 0.05, 0.10, 0.04, 0.01, 0.03, 0.06, 0.07,
0.10, 0.20]
'ret':[0.01, 0.05, -0.06, -0.10, 0.20, 0.08, 0.09, 0.10, 0.20,0.03,
0.30, -0.15}
df = pd.DataFrame(data).set_index(['date', 'id']).sort_index(level='date')
测向
id sd ret
date
2014-05-01 a 0.05 0.01
2014-05-01 b 0.01 0.05
2014-05-01 c 0.03 -0.06
2014-05-01 d 0.05 -0.10
2014-05-02 a 0.10 0.20
2014-05-02 b 0.04 0.08
2014-05-02 c 0.01 0.09
2014-05-02 d 0.03 0.10
2014-05-03 a 0.06 0.20
2014-05-03 b 0.07 0.03
2014-05-03 c 0.10 0.30
2014-05-03 d 0.20 -0.15
期望输出
id sd ret cumret
date
2014-05-01 a 0.05 0.01 1.01
2014-05-01 b 0.01 0.05 1.05
2014-05-01 c 0.03 -0.06 0.94
2014-05-01 d 0.05 -0.10 0.90
2014-05-02 a 0.10 0.20 1.21
2014-05-02 b 0.04 0.08 1.13
2014-05-02 c 0.01 0.09 1.03
2014-05-02 d 0.03 0.10 1.00
2014-05-03 a 0.06 0.20 1.41
2014-05-03 b 0.07 0.03 1.16
2014-05-03 c 0.10 0.30 1.33
2014-05-03 d 0.20 -0.15 0.85
我相信您只需要将
1
添加到ret
列并按id
列分组:如果要按两者分组:
相关问题 更多 >
编程相关推荐