如何合并多个含DatetimeIndex的DataFrame并计算日均值?
解决DataFrame合并后计算日均值的问题
你的核心问题是分组逻辑不对:当前代码用groupby('sensor')是按每个精确到分钟的时间戳分组,每个分组只有一条记录,所以计算出的"均值"其实就是原数据本身,并没有按天聚合。
下面是两种修正方案,你可以根据习惯选择:
方案一:保留DatetimeIndex直接按天分组(更简洁)
这种方式不需要重置索引,直接利用原DataFrame的DatetimeIndex进行按天聚合:
import pandas as pd def join_data(datalist): # 合并所有DataFrame,保留原有的DatetimeIndex joined = pd.concat(datalist) # 使用pd.Grouper按日历日(freq='D')分组,计算各列均值 daily_means = joined.groupby(pd.Grouper(freq='D')).mean() return daily_means
方案二:重置索引后按日期字段分组
如果你需要保留sensor列作为普通列,也可以先重置索引,再提取日期进行分组:
import pandas as pd def join_data(datalist): joined = pd.concat(datalist).reset_index() # 确保`sensor`列是datetime类型(如果原始数据的索引已经是datetime,这一步可省略) joined['sensor'] = pd.to_datetime(joined['sensor']) # 提取日期部分作为分组依据 daily_means = joined.groupby(joined['sensor'].dt.date).mean() # 可选:将索引转换为带UTC时区的datetime,和你的预期输出格式一致 daily_means.index = pd.to_datetime(daily_means.index).tz_localize('UTC') return daily_means
关键说明:
pd.Grouper(freq='D')会自动识别DatetimeIndex,并按完整日历日聚合数据,不管你的原始数据是15分钟间隔还是其他频率。- 如果你的时间索引带时区(比如示例中的
+00:00),两种方案都会保留时区信息,最终生成的索引格式和你预期的一致。
内容的提问来源于stack exchange,提问作者Ami
相关产品推荐
相关产品推荐

