如何用Pandas按一天中不同时间点分组计算均值与方差?
用Pandas按每日时间点分组计算时序数据的均值和方差
需求说明
现有设备每日每15分钟采集的浓度(concentrate)时序数据,存在部分时段缺失,需要按一天中的具体时间点(如00:00:00、00:15:00)对所有日期的数据分组,计算每组的均值和方差。
实现步骤及代码
1. 读取并预处理数据
首先读取数据,同时将timestamp列解析为datetime类型,确保后续能正确提取时间信息:import pandas as pd # 读取CSV数据,parse_dates参数自动将timestamp列转为datetime格式 df = pd.read_csv('your_data_file.csv', parse_dates=['timestamp'])如果数据是直接提供的文本格式,也可以用
pd.read_csv从字符串读取:data_text = """timestamp,concentrate 2019-08-01 00:00:00,872.0 2019-08-01 00:15:00,668.0 ...""" from io import StringIO df = pd.read_csv(StringIO(data_text), parse_dates=['timestamp'])2. 提取每日时间作为分组键
从timestamp中提取时分秒部分,作为分组的依据:# 新增time_of_day列,存储时间的时分秒信息 df['time_of_day'] = df['timestamp'].dt.time3. 分组计算均值和方差
使用groupby按time_of_day分组,通过agg方法同时计算均值和方差。注意Pandas的var()默认是样本方差(自由度ddof=1),若需要总体方差,需指定ddof=0:# 计算样本均值和样本方差 result = df.groupby('time_of_day')['concentrate'].agg(mean='mean', sample_variance='var') # 若需要总体方差,修改为: result = df.groupby('time_of_day')['concentrate'].agg( mean='mean', population_variance=lambda x: x.var(ddof=0) )4. 补全缺失时间点(可选)
如果部分15分钟间隔的时间点没有数据,分组结果中会缺失这些行。可以生成完整的时间序列并重新索引,补全缺失项:# 生成一天内所有15分钟间隔的时间点 full_time_points = pd.date_range(start='00:00:00', end='23:45:00', freq='15min').time # 重新索引,缺失值填充为NaN result = result.reindex(full_time_points)
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

