Pandas:根据另一列的百分比增长率创建一个新列
Posted
技术标签:
【中文标题】Pandas:根据另一列的百分比增长率创建一个新列【英文标题】:Pandas: create a new column based on percentage growth rates from another column 【发布时间】: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]
如您所见,我无法根据前一天应用某天的投资组合公式。请问有人可以帮我吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Pandas:根据另一列的百分比增长率创建一个新列的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:根据字符串的一部分是不是在另一列中的任何位置创建新列
Pandas - 基于另一列(城市名称)创建一个新列(分支名称)
要检查 Pandas Dataframe 列的 TRUE/FALSE,如果 TRUE 检查另一列是不是满足条件并生成具有值 PASS/FAIL 的新列