python - 根据其他数据帧的比较添加一个表示最大值的数据帧
问题描述
我有以下多指数数据框,其中一个 df 代表假设股票的每日高点,另一个包含它们前一天的收盘价。
High_Price Yest_Close
Ticker ABC XYZ RST ABC XYZ. RST
2/1/19 3 10 90 2 9 88
1/31/19 3.5 9 88 4 9.5 89
1/30/19 2.5 9.5 86 3 9.8 85
1/29/19 4 8.5 92 3.5 8 93
1/28/19 4.5 8.2 95 4.8 8 96
1/27/19 2.8 7 94 2.6 6.5 93
1/26/19 2.6 6.5 93 2.7 7 92
我想附加另一个数据框,它代表两个 dfs(High_Price 和 Yest_Close)之间的最大值。所以第三个 df 应该如下所示:
High_Price Yest_Close Max
Ticker ABC XYZ RST ABC XYZ RST ABC XYZ RST
2/1/19 3 10 90 2 9 88 3 10 90
1/31/19 3.5 9 88 4 9.5 89 4 9.5 89
1/30/19 2.5 9.5 86 3 9.8 85 3 9.8 86
1/29/19 4 8.5 92 3.5 8 93 4 8.5 93
1/28/19 4.5 8.2 95 4.8 8 96 4.8 8.2 96
1/27/19 2.8 7 94 2.6 6.5 93 2.8 7 94
1/26/19 2.6 6.5 93 2.7 7 92 2.7 7 93
我尝试了以下逻辑,但没有得到正确的结果:
df['Max',ticker] = df[['High_Price','Yest_Close']].max(axis=1)
我应该如何修复我的代码以获得我正在寻找的结果?
解决方案
你想要level=1
在里面max
,然后创建一个multiindex
后跟df.join
:
m = df[['High_Price','Yest_Close']].max(level=1,axis=1)
m.columns = pd.MultiIndex.from_product((['Max'],m.columns))
out = df.join(m)
High_Price Yest_Close Max
ABC XYZ RST ABC XYZ RST ABC XYZ RST
Ticker
2/1/19 3.0 10.0 90 2.0 9.0 88 3.0 10.0 90.0
1/31/19 3.5 9.0 88 4.0 9.5 89 4.0 9.5 89.0
1/30/19 2.5 9.5 86 3.0 9.8 85 3.0 9.8 86.0
1/29/19 4.0 8.5 92 3.5 8.0 93 4.0 8.5 93.0
1/28/19 4.5 8.2 95 4.8 8.0 96 4.8 8.2 96.0
1/27/19 2.8 7.0 94 2.6 6.5 93 2.8 7.0 94.0
1/26/19 2.6 6.5 93 2.7 7.0 92 2.7 7.0 93.0
推荐阅读
- dart - Dart 构造函数中的大括号有什么作用?
- python - 即时编译为字节码/本机代码
- facebook-graph-api - 如何在 Firebase 云功能中正确执行 axios POST 请求
- apache-kafka - NiFi 的 ConsumeKafka_2_0 支持带有 ScramLoginModule 的 JAAS SASL
- java - java - 将复杂的 java 对象转换为 json
- linux - 如何通过管道将终端命令输出到 Zenity 进度对话框文本?
- ios - 如何使用cordova将自定义框架添加到“链接框架和库”?
- mysql - 优化 mySQL 查询 - 更新 JOIN 2 表
- php - 将递归数组转换为二维数组
- c++ - 我是否需要保护仅在同一线程中修改的变量的读取?