使用向量化操作在Pandas中计算序列累积最大值
问题描述
我有如下DataFrame:
value 10 20 30 20 40 35 60 100 50 45 135
想要新增一列max_value,存储到当前行为止的最大值,最终结果如下:
value max_value 10 10 20 20 30 30 20 30 40 40 35 40 60 60 100 100 50 100 45 100 135 135
我已经用iterrows循环实现了需求:
max_value = df['value'].iloc[0] for index, row_data in df.iterrows(): if row_data['value'] > max_value: max_value = row_data['value'] df.at[index, 'max_value'] = max_value
但我想找一种仅用向量化操作的高效实现方式,理想情况不用重复计算所有之前行的最大值——毕竟max_value要么是前一行的max_value,要么是当前行的value。
解决方案
直接用pandas内置的cummax()方法即可,这是完全向量化的高效操作,正好匹配你的需求:
df['max_value'] = df['value'].cummax()
这个方法会逐行计算累积最大值,每一步仅需比较当前值与之前的累积最大值,完全符合你所说的“要么是前一个max要么是当前值”的逻辑,而且相比循环实现,在数据量较大时性能提升明显。
内容的提问来源于stack exchange,提问作者mwind
相关产品推荐
相关产品推荐

