如何在Pandas DataFrame中创建存储trailing high值的列?
问题描述
假设我们有一个仅包含values列的DataFrame:
import pandas as pd data_dict = {'values':[5,4,3,8,6,1,2,9,2,10]} df = pd.DataFrame(data_dict)
其内容如下:
values 0 5 1 4 2 3 3 8 4 6 5 1 6 2 7 9 8 2 9 10
需要生成一个新列trailing_high,存储截至当前行的历史最高值,期望输出如下:
values trailing_high 0 5 5 1 4 5 2 3 5 3 8 8 4 6 8 5 1 8 6 2 8 7 9 9 8 2 9 9 10 10
目前使用df.iterrows()循环遍历计算,运行速度极慢,求向量化优化方法。
解决方案
直接使用pandas内置的累计最大值函数cummax(),这是完全向量化的操作,性能远优于循环遍历:
df['trailing_high'] = df['values'].cummax()
执行后即可得到目标结果。cummax()会从数据起始位置开始,逐行计算截至当前行的最大值,正好匹配你需要的历史最高值逻辑,且底层基于C实现,处理大规模数据时速度比Python循环快数个数量级。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

