Как эффективно умножить значение строки в определенном столбце в кадре данных на собственное значение с задержкой - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть фрейм данных с двумя столбцами «actp» и «modr»: «actp» содержит фактический ценовой ряд, «modr» содержит прогнозируемый доход для этого ряда.Я хочу создать третий столбец 'modp', который принимает значения ценового ряда, когда они существуют (не NaN), или который умножает значение предыдущего ценового ряда 'actp' на 1 + log return ('modr'), чтобы сгенерировать прогнозируемое значение цены('modp'), а затем умножьте запаздывающие значения 'modp' на результат.Это простая проблема, и ее достаточно легко решить с помощью цикла for.Я хотел бы знать, как может выглядеть эффективное и элегантное решение, так как мне нужно, чтобы оно было оптимизировано для скорости и масштабируемости.

Я могу сделать это с помощью цикла for, хотя в настоящее время оно не добавляет фактическое значение.значение от 'actp' до 'modp', когда в 'actp' есть значение.

for i in range(2,5):
    df['modp'].iloc[i] = df['actp'].iloc[i-1] * np.exp(df['modr'].iloc[i])
    df['actp'].iloc[i] = df['modp'].iloc[i]

исходные данные

Ожидаемый результат

1 Ответ

0 голосов
/ 23 апреля 2019

Как уже упоминал Дэн, вы можете использовать shift

Если я правильно понял ваши вычисления, это должно быть:

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'actp':[10,20,30,40],
                   'modr':[2,2,0,2]})

df['actp'] = df.actp.shift(1) * np.exp(df.modr)

print(df)
         actp  modr
0         NaN     2
1   73.890561     2
2   20.000000     0
3  221.671683     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...