如何使用pandas快速计算滑动窗口内指定值的占比
解决方案
你可以直接使用pandas的向量化滑动窗口运算实现,相比手写for循环效率提升非常显著,仅需一行代码即可完成需求:
df['perc_norm'] = df['error_code'].eq(255).rolling(wndw_size, min_periods=1).mean()
代码逻辑说明
df['error_code'].eq(255):生成布尔序列,error_code等于255的位置为True(数值运算中等价于1),其余为False(等价于0)rolling(wndw_size, min_periods=1):创建滑动窗口对象,第二个参数min_periods=1刚好匹配你原逻辑的边界处理规则:当剩余数据不足窗口大小时,使用现有所有数据计算,无需等窗口填满mean():对窗口内的数值求平均,计算结果恰好等于窗口内255的数量除以窗口总长度,也就是你需要的占比
效率优势说明
你原有的for循环是Python层的逐行迭代,每次都要做切片、条件筛选、计数操作,在数据量较大、窗口尺寸较大的场景下运行会非常慢。而pandas的rolling相关运算基于Cython实现底层逻辑,属于向量化运算,运行效率远高于手写Python循环。
内容的提问来源于stack exchange,提问作者Pier
相关产品推荐
相关产品推荐

