如何用Pandas仅当每小时数据点≥20个时计算小时均值?
Pandas按小时重采样:仅保留样本数达标时段的均值
方法一:分步统计后过滤
先分别计算每小时的样本数量和均值,再根据样本数阈值筛选有效均值:
# 统计每小时各列的样本数量 hourly_counts = df.resample('h').count() # 计算每小时各列的均值 hourly_means = df.resample('h').mean() # 仅保留样本数≥20的均值,其余设为NaN df_H = hourly_means.where(hourly_counts >= 20)
- 若要求整小时所有列样本数都≥20才保留均值,可修改为:
df_H = hourly_means.where(hourly_counts.min(axis=1) >= 20)
方法二:自定义重采样函数
通过resample.apply()直接在分组时判断样本数,达标则返回均值,否则返回NaN:
import numpy as np import pandas as pd def calc_valid_mean(group): if len(group) >= 20: return group.mean() # 样本数不足时,返回与原列数匹配的全NaN Series return pd.Series([np.nan]*len(group.columns), index=group.columns) df_H = df.resample('h').apply(calc_valid_mean)
方法对比
- 方法一效率更高,适合处理大规模数据集;
- 方法二更直观,逻辑可扩展性强(比如后续可添加其他判断条件)。
内容的提问来源于stack exchange,提问作者ValeA
相关产品推荐
相关产品推荐

