You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找pandas DataFrame列中的最大连续增减幅度?

解决思路与实现代码

核心逻辑

要找到最大连续增幅/降幅,关键是先识别出连续上升/下降的区间,再计算每个区间内终点与起点的差值(增幅取正,降幅取起点减终点的正数值),最后取最大值。

具体实现步骤

以你的示例数组 x = [1, 2, 6, 3, 5, 9, 5, 4, 5, 1] 为例,用pandas实现:

  1. 转换为Series并计算相邻差值
import pandas as pd

x = [1, 2, 6, 3, 5, 9, 5, 4, 5, 1]
s = pd.Series(x)
diff = s.diff()  # 计算相邻元素差值,第一个值为NaN
  1. 标记连续上升/下降的区间
  • 连续上升区间:当diff>0时属于同一区间,差值≤0时开启新区间
  • 连续下降区间:当diff<0时属于同一区间,差值≥0时开启新区间
# 标记上升区间分组
up_groups = (diff <= 0).cumsum()
# 标记下降区间分组
down_groups = (diff >= 0).cumsum()
  1. 计算每个区间的增幅/降幅并取最大值
# 最大连续增幅:每个上升区间的终点值减起点值,取最大值
max_up = s.groupby(up_groups).apply(lambda g: g.iloc[-1] - g.iloc[0]).max()

# 最大连续降幅:每个下降区间的起点值减终点值,取最大值
max_down = s.groupby(down_groups).apply(lambda g: g.iloc[0] - g.iloc[-1]).max()

print(f"最大连续增幅:{max_up}")  # 输出6
print(f"最大连续降幅:{max_down}")  # 输出5

逻辑解释

  • (diff <=0).cumsum():当差值≤0时(上升趋势中断),累加计数,让连续上升的部分归为同一组。示例中,连续上升的区间为[1,2,6]、[3,5,9]、[4,5],计算每个区间的终点减起点,最大值为9-3=6。
  • (diff>=0).cumsum():当差值≥0时(下降趋势中断),累加计数,让连续下降的部分归为同一组。示例中,连续下降的区间为[6,3]、[9,5,4]、[5,1],计算每个区间的起点减终点,最大值为9-4=5。

内容的提问来源于stack exchange,提问作者dch27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:17:08