Оптимизировать l oop: создать новый DataFrame на основе условия - PullRequest
0 голосов
/ 20 апреля 2020

Можете ли вы оптимизировать следующее l oop?

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]})

Это l oop:

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]

1 Ответ

0 голосов
/ 21 апреля 2020

Лучший способ оптимизировать все oop - это не использовать один ... но посмотрите мой комментарий о вашей логике c.

# 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]
...