优化循环:根据条件创建一个新的DataFrame

问题描述 投票:0回答:1

您可以优化以下循环吗?

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]

pandas loops dataframe itertools
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.