如何统计DataFrame指定列滑动窗口区间内的非零值数量
pandas滑动窗口统计指定列非零值个数
直接利用非零判断的布尔值可求和的特性实现,不需要写复杂循环,分两种场景处理:
固定长度滑动窗口(窗口大小统一、步长固定)
直接用pandas内置的rolling滚动接口实现,性能比手动切片遍历高很多:# 替换window_size为你实际需要的窗口长度,比如窗口覆盖5行就填5 # min_periods=1表示窗口内只要有值就返回统计结果,可根据需求调整为窗口满长才统计 df["rolling_non_zero_cnt"] = df["data"].rolling( window=window_size, min_periods=1 ).apply(lambda col_slice: col_slice.ne(0).sum(), raw=True)这里的
.ne(0)是pandas原生的“不等于0”判断,返回的布尔序列中True会被按1计算、False按0计算,求和结果就是窗口内非零值的总个数。raw=True参数可以把传入apply的序列转成numpy数组,进一步提升计算速度。自定义起止索引的不规则窗口
如果你是手动指定每个窗口的起止索引i、j,直接对你写的切片代码做统计即可:non_zero_count = df.loc[i:j, "data"].ne(0).sum()如果数据中存在
NaN空值且你不希望把空值计入非零统计,提前把空值填充为0再判断即可:non_zero_count = df.loc[i:j, "data"].fillna(0).ne(0).sum()
内容的提问来源于stack exchange,提问作者Felipe Quintero Suárez
相关产品推荐
相关产品推荐

