如何定位Highest_Returns值对应的来源列?Python pandas求助
问题描述
我已经用PortReturns["Highest_Returns"] = PortReturns.max(axis=1)算出每日10只股票的最高收益,现在需要识别Highest_Returns列中每个值对应的来源列,把列标签填充到Highest_Returns_Ticker列。
现有数据示例:
Date Returns_Apple ... Returns_UL Highest_Returns Highest_Returns_Ticker 0 2013-02-25 NaN ... NaN NaN Input 1 2013-02-26 0.013934 ... -0.005093 0.013934 Input ... ... ... ... ... ... ... [2519 rows x 12 columns]
预期结果:
Date Returns_Apple ... Returns_UL Highest_Returns Highest_Returns_Ticker 0 2013-02-25 NaN ... NaN NaN NaN 1 2013-02-26 0.013934 ... -0.005093 0.013934 Returns_Apple ... ... ... ... ... ... ... [2519 rows x 12 columns]
我推测需要写函数匹配Highest_Returns值和对应列并返回列标签,作为Python新手,求帮助和解释。
解决方案
不用自定义函数,Pandas内置的idxmax()方法就能直接解决问题,步骤如下:
1. 筛选股票收益列
先明确哪些列是股票收益数据(比如Returns_Apple这类),排除Date、Highest_Returns等无关列:
# 筛选所有以"Returns_"开头的列 return_cols = PortReturns.columns[PortReturns.columns.str.startswith("Returns_")]
2. 填充对应列名到目标列
用idxmax(axis=1)按行查找最大值所在的列标签,直接赋值给Highest_Returns_Ticker:
PortReturns["Highest_Returns_Ticker"] = PortReturns[return_cols].idxmax(axis=1)
3. 自动处理NaN值
如果某一行所有收益列都是NaN(比如示例第0行),idxmax()会自动返回NaN,正好符合预期的空值效果,无需额外处理。
完整代码
# 筛选收益列 return_cols = PortReturns.columns[PortReturns.columns.str.startswith("Returns_")] # 计算每日最高收益(已计算过可跳过此行) PortReturns["Highest_Returns"] = PortReturns[return_cols].max(axis=1) # 填充对应股票列名 PortReturns["Highest_Returns_Ticker"] = PortReturns[return_cols].idxmax(axis=1)
代码说明
str.startswith("Returns_"):精准定位所有股票收益列,避免误操作其他列idxmax(axis=1):按行维度查找最大值对应的列标签,直接返回列名,省去手动匹配的麻烦- Pandas内置方法经过优化,处理2500多行数据效率很高,不用写循环或复杂逻辑
内容的提问来源于stack exchange,提问作者uplift_soul
相关产品推荐
相关产品推荐

