You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用Pandas按时间范围分组温度读数问题求助

解决温度数据按分钟/小时分组的问题

嘿,我来帮你搞定这个温度数据分组的问题!你现在的情况是分组后还是列出了每分钟的所有记录,核心问题是只做了分组操作,但没有对每组的温度数据做聚合统计(比如取平均值、最大值、最小值),所以才会把每条原始记录都列出来。下面给你两种实用的解决方法:

方法一:用Pandas快速处理(推荐)

Pandas对时间序列分组的支持非常友好,几步就能搞定:

  1. 读取数据并转为DataFrame
    不管你用TinyDB还是直接读取JSON文件,先把数据转成Pandas的DataFrame格式:

    from tinydb import TinyDB
    import pandas as pd
    
    # 用TinyDB读取数据
    db = TinyDB('tinydb_environment.json')
    df = pd.DataFrame(db.all())
    
    # 或者直接读取JSON文件(如果不用TinyDB的话)
    # import json
    # with open('tinydb_environment.json', 'r') as f:
    #     data = json.load(f)
    # df = pd.DataFrame(data)
    
  2. 转换日期时间格式
    先把字符串类型的date_time转为Pandas能识别的datetime对象,这是正确分组的前提:

    df['date_time'] = pd.to_datetime(df['date_time'])
    
  3. 按分钟/小时分组并聚合
    现在就可以按时间维度分组,同时对tempC做聚合统计了。比如:

    • 按分钟分组,计算每分钟的平均温度:
      minute_avg_temp = df.groupby(df['date_time'].dt.floor('min'))['tempC'].mean().reset_index()
      print(minute_avg_temp)
      
    • 按小时分组,同时计算平均、最高、最低温度:
      hour_temp_stats = df.groupby(df['date_time'].dt.floor('h'))['tempC'].agg(['mean', 'max', 'min']).reset_index()
      print(hour_temp_stats)
      

方法二:纯Python代码处理

如果不想用Pandas,用基础的Python库也能实现:

import json
from datetime import datetime

# 读取JSON数据
with open('tinydb_environment.json', 'r') as f:
    data = json.load(f)

# 初始化字典存储分组数据,键是分钟级时间,值是该分钟的温度列表
minute_groups = {}
for item in data:
    # 解析日期时间字符串
    dt = datetime.fromisoformat(item['date_time'])
    # 把时间精确到分钟(秒和微秒置0)作为分组键
    minute_key = dt.replace(second=0, microsecond=0)
    temp = item['tempC']
    # 把温度加入对应分组
    if minute_key not in minute_groups:
        minute_groups[minute_key] = []
    minute_groups[minute_key].append(temp)

# 计算每组的平均温度并按时间排序
sorted_minute_avg = sorted(
    [(key, sum(values)/len(values)) for key, values in minute_groups.items()],
    key=lambda x: x[0]
)

# 打印结果
for dt, avg_temp in sorted_minute_avg:
    print(f"{dt.strftime('%Y-%m-%d %H:%M')}: {avg_temp:.2f}°C")

关键提醒

  • 一定要先把date_time字符串转为datetime对象,不然没法正确提取分钟/小时维度的时间键;
  • 分组后必须做聚合操作(比如mean()、agg()),不然得到的只是分组后的原始记录集合,而不是你想要的每个时间单位的汇总数据。

内容的提问来源于stack exchange,提问作者justdata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:49:51