[英]python pandas dataframe, operations on values
我試圖了解Pandas DataFrames如何向下復制信息,然后重置直到下一個變量更改...具體在下面,一旦我的Signal或Signal_Diff從1切換為0,如何將Share_Amt_To_Buy重置為0?
在Share_Amt_To_Buy上使用.cumsum()最終會降低這些值並累積不完全是我想要執行的操作。
我的目標是,當Signal從0變為1時,將計算並復制Share_Amt_To_Buy,直到Signal切換回0。然后,如果Signal再次變為1,我希望基於該時間點重新計算Share_Amt_To_Buy。
希望這是有道理的-請讓我知道。
Signal Signal_Diff Share_Amt_To_Buy (Correctly) Share_Amt_To_Buy (Currently)
0 0 0 0
0 0 0 0
0 0 0 0
1 1 100 100
1 0 100 100
1 0 100 100
0 -1 0 100
0 0 0 100
1 1 180 280
1 0 180 280
如您所見,我的信號從0到1交替變化,這意味着:0 =無交易(或頭寸)1 =交易(有頭寸)
Signal_Diff計算如下
portfolio['Signal_Diff'] = portfolio['Signal'].diff().fillna(0.0)
當信號從0變為1時,將計算“ Share_Amt_To_Buy”列。我以以下示例為例進行計算
initial_cap = 100000.0
portfolio['close'] = my stock's closing prices as a float
portfolio['Share_Amt'] = np.where(variables['Signal']== 1.0, np.round(initial_cap / portfolio['close'] * 0.25 * portfolio['Signal']), 0.0).cumsum()
portfolio['Share_Amt_To_Buy'] = (portfolio['Share_Amt']*portfolio['Signal'])
據我了解,大熊貓沒有內置的公式模塊。 您可以在列,單元格,數組上執行公式,並從中生成不同的數組或值(df [column] .count()是示例),並且可以做很多類似的工作,但是沒有動態更新數組的方法本身基於數組中的另一個值(例如Excel公式)。
您總是可以迭代執行該過程,然后說:
>>> for index in df.index:
>>> if df['Signal_Diff'] == 0:
>>> df.loc[index, 'Signal_Diff'] = some_value
>>> elif df['Signal_Diff'] == 1:
>>> df.loc[index, 'Signal_Diff'] = some_other_value
或者,您可以通過地圖工具創建自定義函數: https : //stackoverflow.com/a/19226745/4131059
編輯:
另一個解決方案是在對舊數組和新數組進行一些更改后,在舊數組和新數組中查詢值為1的所有索引:
>>> df_old_list = df[df.Signal_Diff == 1].index.tolist()
>>> ...
>>> df_new_list = df[df.Signal_Diff == 1].index.tolist()
>>>
>>> for x in df_old_list:
>>> if x in df_new_list:
>>> df_new_list.remove(x)
然后僅重新計算df_new_list中的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.