如何不使用for循环从DataFrame列中提取逐次突破的历史最大值
解法
你可以直接用pandas内置的向量化函数cummax(累积最大值)实现,全程不需要自己写循环:
步骤说明
- 用
cummax()计算Price列从首行到当前行的最大值序列 - 筛选出累积最大值发生变化的行,对应的Price值就是你要的历史新最大值
完整代码
import pandas as pd # 示例数据构造 df = pd.DataFrame({'Price': [3, 2, 12, 5, 7, 16]}) # 核心逻辑 result = df['Price'][df['Price'].cummax().diff().ne(0)].tolist() print(result)
输出结果
[3, 12, 16]
逻辑解释
- 示例数据的
cummax()返回结果为[3, 3, 12, 12, 12, 16],每一位都是截止到当前行的历史最大值 - 用
diff()计算相邻两位的差值,差值不为0的位置就是出现新最大值的位置 - 用得到的布尔序列过滤原Price列,就可以直接拿到所有历史新最大值
内容的提问来源于stack exchange,提问作者SKPS
相关产品推荐
相关产品推荐

