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

如何基于滚动窗口计算更新Pandas DataFrame的flag列且保留原有值?

解决方案

核心思路

原来的np.where会强制覆盖所有行的flag值,要实现仅更新满足条件的行,不满足条件的保留原有值,只需先筛选出符合条件的行,再单独赋值即可,无需替换整个列。

优化后的代码实现

# 用rolling原生方法计算窗口极值,替代低效的apply写法
rolling_min = df['A'].rolling(60).min()
rolling_max = df['A'].rolling(60).max()

# 生成满足条件的布尔掩码
condition = (rolling_min > 50) & (rolling_max < 100)

# 仅对符合条件的行更新flag为'yes',其余行保留原有值
df.loc[condition, 'flag'] = 'yes'

补充说明

  • 如果flag列尚未初始化,可先设置默认值(比如初始为'no'),再执行赋值:
    df['flag'] = 'no'  # 初始化默认值
    df.loc[condition, 'flag'] = 'yes'
    
  • 使用rolling().min()和rolling().max()比apply(lambda s: s.min())效率高很多,数据量大时差异尤为明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:52:05