【问题标题】:Pandas: create a new column based on percentage growth rates from another columnPandas:根据另一列的百分比增长率创建一个新列
【发布时间】:2022-01-24 00:41:17
【问题描述】:

我很确定我正在为一些非常简单的事情而苦苦挣扎,但我需要一些帮助......

我正在尝试在Portfolio 列中添加基于每日价格发展的股票总价值:

Date Close Change Portfolio
2018-12-27 10381.509766 NaN 1000.000000
2018-12-28 10558.959961 0.017093 1017.092908
2019-01-02 10580.190430 0.002011 1002.010659
2019-01-03 10416.660156 -0.015456 984.543731
2019-01-04 10767.690430 0.033699 1033.698927

因此我正在使用以下功能:

def XP_strategy(data):
    #Starting capital
    START = 1000
    data['Change'] = data['Close'].pct_change()
    data['Portfolio'] = START
    data.loc[1:, 'Portfolio'] = data['Portfolio'].shift(1) * (1 + data['Change'])

    columns = ['Close', 'Change', 'Portfolio']

    return data[columns]
    

如您所见,我无法根据前一天应用某天的投资组合公式。请问有人可以帮我吗?

【问题讨论】:

    标签: python pandas yahoo-finance


    【解决方案1】:

    此线程中的其他答案在技术上是正确的并返回您的预期输出 - 但如果您尝试计算股票价值 - 这是错误的。在更简单的数字上——如果你买了 10 股每股 100 美元的股票,一段时间后每股价值 1000 美元,你的投资组合应该大 10 倍。您提出的方法不会出现这种情况。

    我会以一种更简单的方式来解决这个问题 - 您只需建立一个比例 portfolio / close 一次(AKA 拥有的股份数量),然后使用从给定的 close 值中找出 portfolio 值的比例。像这样:

    start = 1000
    proportion = start/df['Close'].iloc[0]
    df['Portfolio'] = proportion * df['Close']
    

    结果:

             Date         Close           Portfolio
    0  2018-12-27   10381.509766        1000.000000
    1  2018-12-28   10558.959961        1017.092908
    2  2019-01-02   10580.190430        1019.137935
    3  2019-01-03   10416.660156        1003.385865
    4  2019-01-04   10767.690430        1037.198892
    

    【讨论】:

      【解决方案2】:

      使用pct_change

      START = 1000
      df['Portfolio'] = START + START * df['Close'].pct_change().fillna(0)
      print(df)
      
      # Output:
               Date         Close    Change    Portfolio
      0  2018-12-27  10381.509766       NaN  1000.000000
      1  2018-12-28  10558.959961  0.017093  1017.092908
      2  2019-01-02  10580.190430  0.002011  1002.010659
      3  2019-01-03  10416.660156 -0.015456   984.543731
      4  2019-01-04  10767.690430  0.033699  1033.698927
      

      【讨论】:

        猜你喜欢
        • 2022-10-15
        • 2020-04-16
        • 2020-12-17
        • 1970-01-01
        • 2021-03-02
        • 2021-09-13
        • 2023-01-04
        • 2020-09-20
        • 2021-11-12
        相关资源
        最近更新 更多