2014-05-07 34 views
-2

我對數據框內的算術有疑問。請注意,在每個數據幀我下面列的是基於彼此除了​​「增持」如何在熊貓數據框中進行相減

這裏是我的數據框的縮短版

'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 

現金= initial_cap - 增持

+0

請澄清您的問題。例如,你的數據框叫做'portfolio'?數據框中的每個條目代表什麼?如何計算「持有量」,「現金」和「總額」?由於您似乎使用位置['positions_diff']'和'data ['close']'來計算'portfolio ['cash']',所以關於這些的更多信息可能也會有所幫助。 – exp1orer

+0

同意,請詳細解釋你想要做什麼。 – FooBar

+0

嗨,大家,抱歉的歧義。我編輯了我的原始帖子。我試圖將其簡化爲計算本身。忽略其餘的計算方式......我希望這有助於。 –

回答

0

因此,我試圖重新表述:您首先使用起始資本10和給定順序的持股{0, 0, 1, 1.5, 2},並且想要創建一個10的現金變量,只要cash0。一旦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 
+0

我一定會試試這個。這裏是邏輯:總數=現金+持有量......但是一旦持股從0.0變爲價值,我的現金需要保持不變。 –

+0

然後,只要一旦計算出其他所有內容,就可以通過簡單的列添加計算總計。 – FooBar

+0

這將如何工作?你能給我看一個樣本方程嗎?真的很感謝它 –