如何在pandas数据帧中减去

时间:2014-05-07 00:33:01

标签: python pandas dataframe

我对数据帧中的算术有疑问。请注意,除了“馆藏”

之外,我的数据框中的以下每列都是相互依据的

这是我的数据框的缩短版本

'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 - 馆藏

1 个答案:

答案 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