[英]Python: How to populate Pandas column that depends on the previous value (previous row)?
我正在構建一個財務應用程序。 我的位置取決於先前的位置(前一行)以及'信號'列(同一行) 。
DataFrame稱為SPY。
position_arr = []
position = 0
for row in SPY['signal']:
if row=='BUY' and position == 0:
position = 1
elif row=='SELL' and position == 0:
position = -1
elif row=='CLOSE SELL' and position == -1:
position = 0
elif row=='CLOSE BUY' and position == 1:
position = 0
position_arr.append(position)
SPY['position']=position_arr
有沒有更好,更有效的方法來做到這一點?
您可以移動position
列並在列軸上使用apply()
:
def apply_func(row):
if row['signal']=='BUY' and row['pos_shifted'] == 0:
position = 1
elif row['signal']=='SELL' and row['pos_shifted'] == 0:
position = -1
elif row['signal']=='CLOSE SELL' and row['pos_shifted'] == -1:
position = 0
elif row['signal']=='CLOSE BUY' and row['pos_shifted'] == 1:
position = 0
return position
SPY['pos_shift'] = SPY['position'].shift()
SPY['position'] = SPY.apply(apply_func, axis=1)
您可以在'signal'列上使用apply
並使用變量來保存之前的值。
prev_val = None #if you don't know what should be the first value
def check_condition(current_val):
global prev_val
val = 0
if prev_val is not None:
if current_val == 'BUY' and prev_val == 0:
val = 1
elif current_val == 'SELL' and prev_val == 0:
val = -1
elif current_val == 'CLOSE SELL' and prev_val == -1:
val = 0
elif current_val == 'CLOSE BUY' and prev_val == 1:
val = 0
else: # handle the first row case separately
val = 0 # TODO: what is the value for the first row?
prev_val = val
return val
df['position'] = df['signal'].apply(check_condition)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.