【问题标题】:How do i multiply a list of values by a dataframe of values then use those results to multiply by the next row of values in the dataframe?如何将值列表乘以值的数据帧,然后使用这些结果乘以数据帧中的下一行值?
【发布时间】:2020-07-03 18:51:33
【问题描述】:

我正在尝试编写一个每日股价回报模拟器。我需要开始分配资金(比如说,三只股票),然后乘以这些股票的回报数据框。例如,假设我分配了[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(第一个值在 df 的第 2 列)和第 3 列的第三个分配/第一个值相同,并将结果附加到以今天日期为键的字典中。

如何获取这些结果并将它们乘以下一行的值,使用 today() + 1 将它们附加到字典中,然后执行相同的操作,直到遍历整个数据集?

【问题讨论】:

    标签: python pandas numpy iterator


    【解决方案1】:

    您可以通过从按预期日期索引的allocation 列表构建数据框,让 pandas 完成全部操作:

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

    df1 是:

                  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
    

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多