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
相关产品推荐
相关产品推荐

