我对数据帧中的算术有疑问。请注意,除了“馆藏”
之外,我的数据框中的以下每列都是相互依据的这是我的数据框的缩短版本
'holdings' & 'cash' & 'total'
0.0 10000.0 10000.0
0.0 10000.0 10000.0
1000 9000.0 10000.0
1500 10000.0 11500.0
2000 10000.0 12000.0
initial_cap = 10000.0
但这是我的问题......我第一次持有,现金是正确计算的,现金为10000.0 - 持有1000.0 = 9000.0
我需要现金保持在9000.0,直到我的持股再次回到0.0 这是我的计算
换句话说,你如何计算现金,使其保持在9000.0,直到持股量回到0.0
以下是我希望它看起来像
的方式'holdings' & 'cash' & 'total'
0.0 10000.0 10000.0
0.0 10000.0 10000.0
1000 9000.0 10000.0
1500 9000.0 10500.0
2000 9000.0 11000.0
cash = initial_cap - 馆藏
答案 0 :(得分:0)
所以我试着改写一下:你从初始资本10
和给定的一系列资产{0, 0, 1, 1.5, 2}
开始,并希望在10
时创建cash
的现金变量0
。只要cash
在初始期间增加x
,您就希望现金为10 - x
,直到现金再次等于0
。
如果这是正确的,这就是我要做的事情(总和的逻辑和所有这些对我来说仍然不清楚,但这是你最后添加的内容,所以我专注于此。)
PS。提供创建样本的代码被认为是不错的
df = pd.DataFrame([0, 1, 2, 2, 0, 2, 3, 3], columns=['holdings'])
x = 10
# triggers are when cash is supposed to be zero
triggers = df['holdings'] == 0
# inits are when holdings change for the first time
inits = df.index[triggers].values + 1
df['cash'] = 0
for i in inits:
df['cash'][i:] = x - df['holdings'][i]
df['cash'][triggers] = 0
df
Out[339]:
holdings cash
0 0 0
1 1 9
2 2 9
3 2 9
4 0 0
5 2 8
6 3 8
7 3 8