pandas - 计算python中多列的开盘/收盘价格百分比变化
问题描述
我有一个 1010 x 1625 长的数据框,其中包含可追溯到 2015 年的标准普尔 500 指数股票的开盘价和收盘价(示例如下)。
我正在尝试根据以下内容创建一个新的数据框,其中包含每只股票的每日回报百分比。
(当前数据框)
| | A EQUITY PX_OPEN | A EQUITY PX_LAST | AAL EQUITY PX_OPEN | AAL EQUITY PX_LAST |
| ---------- | -----------------| ---------------- | ------------------ | ------------------ |
| 02/01/2015 | 41.18 | 40.56 | 54.16 | 53.91 |
| 03/01/2015 | 40.32 | 39.80 | 54.35 | 53.88 |
| 04/01/2015 | 39.81 | 39.18 | 54.27 | 53.04 |
(期望的输出)
| | A EQUITY PER_RET | AAL EQUITY PER_RET |
| ---------- | -----------------| ------------------ |
| 02/01/2015 | -1.51 | -.46 |
| 03/01/2015 | -1.29 | -.87 |
| 04/01/2015 | -1.58 | -2.27 |
公式 = ((px_last - px_open) / px_open) * 100
A EQUITY_RET = ((40.56 - 41.18) / 41.18) * 100 = -1.51
我的主要问题是每个列标题都有不同的名称,我不确定如何遍历每对打开/关闭列来计算百分比回报。
感谢是否有人能指出我正确的方向。
谢谢。
解决方案
你可以试试:
df = df.set_index('index')
df = df.groupby(df.columns.str.split(' ').str[0], axis=1).apply(lambda x: (
(x.iloc[:, 1] - x.iloc[:, 0]) / x.iloc[:, 0]).mul(100)).add_suffix(' EQUITY PER_RET')
完整示例:
df = pd.DataFrame({'index': {0: ' 02/01/2015 ', 1: ' 03/01/2015 ', 2: ' 04/01/2015 '},
'A EQUITY PX_OPEN': {0: 41.18, 1: 40.32, 2: 39.81},
'A EQUITY PX_LAST': {0: 40.56, 1: 39.8, 2: 39.18},
'AAL EQUITY PX_OPEN': {0: 54.16, 1: 54.35, 2: 54.27},
'AAL EQUITY PX_LAST': {0: 53.91, 1: 53.88, 2: 53.04}})
df = df.set_index('index')
df = df.groupby(df.columns.str.split(' ').str[0], axis =1).apply(lambda x: ((x.iloc[:,1] - x.iloc[:,0]) / x.iloc[:, 0]).mul(100)).add_suffix(' EQUITY PER_RET')
输出:
A EQUITY PER_RET AAL EQUITY PER_RET
index
02/01/2015 -1.505585 -0.461595
03/01/2015 -1.289683 -0.864765
04/01/2015 -1.582517 -2.266446
注意:上述方法适用scalable
于并且可以与其他列一起使用。
推荐阅读
- r - 请问,这个错误在 R Studio 中是什么意思?
- javascript - ReactPlayer 想要设置播放但收到警告
- list - 获取scala中两个日期之间的年/月/日/小时列表
- laravel - 重定向后,Laravel 5.5 Flash 消息在刀片文件中不起作用
- javascript - 不能在函数中使用传递对象的方法
- sql - 在 informatica 目标平面文件的输出底部添加总行
- install4j - createbundle 因 `file.parentFile must not be null` 而失败
- javascript - 如何将时钟功能添加到 LED 定时器
- database - Flutter -> UploadTask 方法 OnComplete 不存在
- ios - 在 App-Developer 帐户中更改 App-Icon,然后再重新发布