如何为含非规整时间戳的DataFrame计算每日每两组测量值的温度均值?
解决方案
要实现按日期分组,且每组内每两个连续测量值(按时间排序后)计算均值的需求,可通过以下通用步骤完成,适配时间戳不规整的情况:
步骤说明
- 合并并排序时间戳:先将日期和时间列合并为完整的datetime字段,确保每组内的测量值按时间顺序排列(因为数据不规整,必须先排序保证分组逻辑正确)。
- 生成组内分组标签:对每个日期分组内的行,按顺序分配组ID,每两个行归为同一组。
- 分组计算均值:按日期和组ID分组,计算每组的温度均值。
代码实现
import pandas as pd # 构造示例数据(模拟用户的df) data = { '日期': ['2022/01/01']*4 + ['2022/02/01']*4, '时间': ['00:00:00', '06:00:00', '12:00:00', '18:00:00', '00:00:00', '06:00:00', '12:00:00', '18:00:00'], '温度': [23,14,21,13,25,23,15,17] } df = pd.DataFrame(data) # 1. 合并日期和时间为datetime列,并按此列排序 df['datetime'] = pd.to_datetime(df['日期'] + ' ' + df['时间']) df = df.sort_values('datetime').reset_index(drop=True) # 2. 按日期分组,生成组内的分组标签(每两个一组) df['组ID'] = df.groupby('日期').cumcount() // 2 # 3. 按日期和组ID分组,计算温度均值 result = df.groupby(['日期', '组ID'])['温度'].mean().reset_index() # 可选:给组ID添加更直观的名称(比如"第1组"、"第2组") result['组名称'] = '第' + (result['组ID'] + 1).astype(str) + '组' print(result)
输出示例
日期 组ID 温度 组名称 0 2022/01/01 0 18.5 第1组 1 2022/01/01 1 17.0 第2组 2 2022/02/01 0 24.0 第1组 3 2022/02/01 1 16.0 第2组
适配特殊情况
如果某天的测量值数量为奇数(比如3个),上述代码会将最后一个单独归为一组并计算均值。若想忽略这类单元素组,可在最后一步添加过滤:
# 过滤掉组内元素数量小于2的分组 result = df.groupby(['日期', '组ID']).filter(lambda x: len(x)>=2).groupby(['日期', '组ID'])['温度'].mean().reset_index()
内容的提问来源于stack exchange,提问作者Bartholomew
相关产品推荐
相关产品推荐

