如何绘制分钟级分辨率的月度日均功率曲线?
分钟级月度日均功率曲线的无循环实现方法
你之前按index.hour分组能得到小时级日均曲线,是因为它把每天同一小时的数据聚合并计算均值。但单独按index.minute分组会出错——这是因为它会把所有小时的第N分钟(比如00:01、01:01…23:01)归为一组,而不是你需要的「每天的HH:MM这个具体时间点」的日均数据。
下面是两种无循环的最优实现方式:
方法1:利用index.time直接分组
datetime索引的time属性会返回HH:MM:SS格式的时间对象(你的数据是分钟级,所以就是HH:MM),用它分组刚好对应一天中每个具体的分钟时间点:
# 计算July数据集的分钟级日均功率 minutely_daily_avg = df_jul.groupby(df_jul.index.time)['Power'].mean() # 绘制曲线 plt.plot(minutely_daily_avg, label='July Minutely Avg') plt.xlabel('Time of Day') plt.ylabel('Average Power') plt.legend() plt.show()
这种方法最直观,x轴直接显示HH:MM格式的时间,无需额外转换。
方法2:通过「一天内的分钟偏移量」分组
如果需要更灵活的x轴控制,可以计算每个时间点在一天中的总分钟数(0到1439,对应00:00到23:59),再分组计算均值:
# 添加列存储一天内的分钟数 df_jul['minute_of_day'] = df_jul.index.hour * 60 + df_jul.index.minute # 按分钟数分组计算日均功率 minutely_daily_avg = df_jul.groupby('minute_of_day')['Power'].mean() # 绘制时将分钟数转换为时间格式(可选,让x轴更友好) plt.plot(pd.to_datetime(minutely_daily_avg.index, unit='m', origin='today'), minutely_daily_avg, label='July Minutely Avg') plt.xlabel('Time of Day') plt.ylabel('Average Power') plt.legend() plt.show()
两种方法都利用了pandas的内置分组优化,完全不需要循环,效率远高于逐分钟计算。
内容的提问来源于stack exchange,提问作者Teemu
相关产品推荐
相关产品推荐

