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

Я пытаюсь кодировать ежедневный симулятор возврата цены акций. Мне нужно взять начальное распределение средств (скажем, по трем акциям) и умножить на график доходности этих акций. Так, например, допустим, у меня есть распределение [1000, 2000, 7000] долларов, я умножаю эти значения на первую строку результатов, например [-.01, .05, .009]. Как мне тогда взять этот результат и умножить его на следующий ряд возвращений во фрейме данных, а затем добавить каждое значение в словарь?

Пример кода ниже:

import pandas as pd
import numpy as np

df_dict = {'ba': [.001588,.001540, .001001, .001206, .001338], 'gs':[0.001064,0.001232, 0.001748, 0.001642, 0.001616],
          'ge': [0.001030, 0.000876, 0.001335, 0.000756, .000880]}

df = pd.DataFrame(df_dict)

allocation = [1000, 2000, 7000]

Так что я хотел бы умножить 1000 (первое значение в распределении) на .001588 (первое значение первого столбца df) и 2000 (отправить значение в распределении) на .001064 (первое значение во 2-м столбце df) и то же самое для третьего размещения / первого значения 3-го столбца и добавить результаты в словарь с сегодняшней датой в качестве ключа.

Как мне взять эти результаты и умножить их на значения следующей строки, добавить их в словарь с помощью сегодняшнего дня () + 1, а затем делать то же самое, пока я не просмотрю весь набор данных?

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете позволить pandas выполнять полные операции, создавая фрейм данных из списка allocation, проиндексированного по ожидаемым датам:

ix = pd.date_range(datetime.date.today(), freq='D', periods = len(df))
df1 = pd.DataFrame(data = [allocation], index=ix, columns = df.columns)

df1 is:

              ba    gs    ge
2020-03-23  1000  2000  7000
2020-03-24  1000  2000  7000
2020-03-25  1000  2000  7000
2020-03-26  1000  2000  7000
2020-03-27  1000  2000  7000

Вы можете использовать тот же индекс для начального df, использовать cumprod для умножения строк и, наконец, получить произведение обоих фреймов данных:

df.set_index(ix).cumprod() * df1

для получения:

                      ba            gs            ge
2020-03-23  1.588000e+00  2.128000e+00  7.210000e+00
2020-03-24  2.445520e-03  2.621696e-03  6.315960e-03
2020-03-25  2.447966e-06  4.582725e-06  8.431807e-06
2020-03-26  2.952246e-09  7.524834e-09  6.374446e-09
2020-03-27  3.950106e-12  1.216013e-11  5.609512e-12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...