您可以优化以下循环吗?
signals = pd.DataFrame({'signal':[0,0,0,1,0,-1,0,1,0,0]})
data = pd.DataFrame({'value':[10,11,9,5,6,4,1,4,5,5]})
这是循环:
number = []; num = 0
for index, row in signals.iterrows():
if signals.signal[index] > 0:
num = data.value[index]
elif signals.signal[index] < 0:
num = 0
number.append(num)
结果是:
number= [0, 0, 0, 5, 5, 0, 0, 4, 4, 4]
答案 0 :(得分:0)
优化循环的最佳方法是不使用循环...而是请参阅我对您的逻辑的评论。
# numpy.select with your conditions
arr = np.select([signals['signal'] > 0, signals['signal'] < 0], [data['value'], 0], np.nan)
# create a dataframe and forward fill NaN then back to array
number = pd.DataFrame(arr).fillna( method='ffill').fillna(0).astype(int)[0].to_numpy().tolist()
# [0, 0, 0, 5, 5, 0, 0, 4, 4, 4]