首页 > 解决方案 > 根据其他数据帧的比较添加一个表示最大值的数据帧

问题描述

我有以下多指数数据框,其中一个 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)

我应该如何修复我的代码以获得我正在寻找的结果?

标签: pythonpandasdataframe

解决方案


你想要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

推荐阅读