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

Pandas DataFrame去除连续重复值并判断序列升降趋势的实现方案

方案问题分析
  • 缺失核心的连续去重逻辑:原需求明确要求先移除连续重复值,现有代码完全未实现该步骤,连续相等的数值会被判定为不符合递增/递减要求,直接导致最终趋势判断错误。
  • 占比计算逻辑错误:diff序列的第一个值为NaN,有效差值的总数是序列长度减1,同时未考虑去重后序列长度会变化,用原始df长度作为分母计算占比完全不准确。
  • 存在同时输出两个结果的异常可能:现有代码的判断逻辑没有互斥处理,极端场景下会同时打印increasing和decreasing两个结果。
  • 未处理边界场景:当原始序列长度<2、或者去重后序列长度<2时,没有足够的变化数据做判断,现有代码会出现不符合预期的判定结果。
优化方案

优化点说明

  • 先完成连续重复值移除,使用pandas的ne()方法快速筛选出和前一个值不相等的元素
  • 新增边界场景处理,去重后序列长度小于2时直接判定为平稳
  • 调整占比计算逻辑,用有效差值的总数作为分母,判断逻辑更直观不易出错
  • 调整判断为互斥逻辑,避免同时输出多个结果

优化后代码

import pandas as pd

def judge_trend(series):
    # 移除连续重复值
    dedup_series = series.loc[series.ne(series.shift())]
    # 边界情况处理:无足够变化数据直接判定平稳
    if len(dedup_series) < 2:
        return "more or less constant"
    # 计算有效差值
    diff = dedup_series.diff().dropna()
    valid_count = len(diff)
    # 计算递增/递减占比
    inc_ratio = (diff > 0).sum() / valid_count
    dec_ratio = (diff < 0).sum() / valid_count
    
    if inc_ratio >= 0.8:
        return "increasing"
    elif dec_ratio >= 0.8:
        return "decreasing"
    else:
        return "more or less constant"

# 测试调用
df = pd.DataFrame([1,2,3,5,5,6,7,7,5])
print(judge_trend(df[0]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:03