簡體   English   中英

python pandas dataframe,對值的操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM