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
我很确定我正在为一些非常简单的事情而苦苦挣扎,但我需要一些帮助...
我正在尝试在 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