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

Python:对含Datetime、Hub的Dataframe聚合平均值并转宽表

解决方法

针对你的需求,不用手动为每个Hub创建DataFrame,用Pandas内置的pivot_table或groupby+unstack就能高效实现,这两种都是新手易上手的最优方案。

示例数据(方便你测试)

先构造一个和你数据结构一致的示例DataFrame:

import pandas as pd

# 生成测试数据
dates = pd.date_range('2024-01-01', periods=2, freq='H')
df = pd.DataFrame({
    'Hub': ['HubA', 'HubB', 'HubA', 'HubB'],
    'Delivery Interval': [1, 1, 2, 2],
    'Settlement Point Price': [10, 20, 15, 25]
}, index=dates.repeat(2))

方法1:使用pivot_table(推荐,语法直观)

直接指定索引、列、聚合字段和计算方式,一步得到结果:

result_df = df.pivot_table(
    index=df.index,  # 保留原Datetime索引
    columns='Hub',   # 将Hub转为列
    values='Settlement Point Price',  # 要计算的字段
    aggfunc='mean'   # 聚合方式:平均值
).rename_axis(columns=None)  # 可选:去掉列索引的"Hub"标签,让结果更简洁

方法2:使用groupby + unstack

先按Datetime和Hub分组计算均值,再将Hub从行维度转成列维度:

# 分组计算每个Datetime-Hub组合的均价
grouped = df.groupby([df.index, 'Hub'])['Settlement Point Price'].mean()
# 将Hub转为列
result_df = grouped.unstack('Hub')
# 可选:去掉列名标签
result_df.columns.name = None

补充说明

  • 如果某个Datetime下缺少某个Hub的数据,结果中会显示NaN,可以用result_df.fillna(0)(或其他你需要的值)填充缺失值
  • 这两种方法都是Pandas原生的高效操作,处理大量数据时性能远优于手动循环创建DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:52:41