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

按24行分组计算日均温:Pandas DataFrame分组报错及列丢失问题

解决按坐标+日期计算日均温的问题

Hey there! 针对你要给每个坐标对计算日均温的需求,最靠谱的方案是直接按「日期+纬度+经度」分组,而不是靠行索引整除来凑24行,这样既准确又能保留你需要的所有列。

最优代码实现

首先确认time列是datetime类型(如果还没转的话),然后直接分组计算:

import pandas as pd

# 确保time列为datetime格式(如果原始数据不是的话)
df['time'] = pd.to_datetime(df['time'])

# 按日期、纬度、经度分组,计算t2m的均值,同时不设置为索引
daily_avg_temp = df.groupby(
    [df['time'].dt.date, 'latitude', 'longitude'],
    as_index=False
)['t2m'].mean()

# 可选:把date类型转回datetime格式,和原数据格式统一
daily_avg_temp['time'] = pd.to_datetime(daily_avg_temp['time'])

运行后得到的结果就完全符合你的期望:time列保留日期部分,latitude和longitude完整保留,t2m是对应坐标当日24小时的平均温度。

聊聊你之前方法的问题

  1. 最初用df.index//N报错,是因为你的索引是DatetimeIndex,这种时间类型的索引不支持整数整除操作,所以触发了TypeError。
  2. 重置索引后用df.index//N分组,虽然能按24行切分,但无法保证每个分组是同一坐标的同一天数据——如果你的数据排序有波动(比如不同坐标的小时数据穿插),这种分组会直接算错。而且分组时time列被当成数值列计算了均值,自然丢失了有效的日期信息。
  3. 后来加了latitude和longitude分组,但还是依赖行索引整除,本质上还是没利用时间本身的日期属性,所以依然丢失了time列的有效信息。

补充:如果time是DataFrame的索引

从你给出的df.head输出看,time是DataFrame的索引,那可以先把索引转成列再处理:

# 把索引转为普通列
df = df.reset_index()
df['time'] = pd.to_datetime(df['time'])

# 后续分组代码和上面一样
daily_avg_temp = df.groupby(
    [df['time'].dt.date, 'latitude', 'longitude'],
    as_index=False
)['t2m'].mean()

daily_avg_temp['time'] = pd.to_datetime(daily_avg_temp['time'])

这样就能完美得到你想要的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:32:53