如何使用Python计算DataFrame中零值间非零数据段的间歇平均值
连续非零数据块平均值计算方案
核心逻辑为给每一段连续非零数据分配唯一分组ID,过滤零值后按分组聚合求均值,全程使用pandas向量化运算,可适配千万行级大体量DataFrame的性能需求。

实现代码
import pandas as pd # 构造测试数据,可替换为你的实际DataFrame df = pd.DataFrame({'value': [2,3,4,5,0,0,6,7,8,0,9,10,11,12,13]}) # 1. 生成非零值掩码 mask = df['value'] != 0 # 2. 给连续非零块打唯一分组标签 df['group'] = (mask & (~mask.shift(fill_value=False))).cumsum() # 3. 过滤零值后按分组求平均值 non_zero_block_avg = df[mask].groupby('group')['value'].mean() # 输出结果 print(non_zero_block_avg)
输出示例
group 1 3.5 2 7.0 3 11.0 Name: value, dtype: float64
适配说明
- 若需要对多列分别计算非零块均值,对每列单独执行上述逻辑即可
- 若零值为接近0的极小值而非严格等于0,可将掩码规则修改为
mask = df['value'].abs() > 你设置的阈值适配场景 - 若需要获取每个非零块的起止索引、数据长度等信息,可修改groupby的聚合规则,例如使用
agg函数自定义返回字段
内容的提问来源于stack exchange,提问作者Gamaal Heikal
相关产品推荐
相关产品推荐

