Pandas:根据另一列的百分比增长率创建一个新列

Pandas: create a new column based on percentage growth rates from another column

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

我正在尝试在 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]
    

如您所见,我无法根据前一天的情况将公式应用于每天的投资组合离子。请问有人可以帮助我吗?

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

我会用更简单的方法来解决这个问题——你只需要建立一个比例 portfolio / close once (AKA number of拥有的股份),然后使用该比例从给定的 收盘价 值计算出 投资组合 值。像这样:

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

使用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