我有一个按日期时间索引的表,每个日期时间都有多个层(中心和交货间隔):
日期时间 | 中心 | 交货间隔 | 结算点价格 |
---|---|---|---|
2024-01- 01 01:00:00 | 休斯顿中心 | 1 | 13.35 |
2024-01-01 01:00:00 | 休斯顿中心 | 2 | 16.60 |
2024- 01-01 01:00:00 | 休斯顿中心 | 3 | 17.15 |
2024-01-01 01:00:00 | 休斯顿中心 | 4 | 23.61 |
2024-01-01 01:00:00 | 北枢纽 | 1 | 13.35 |
2024-01-01 01:00:00 | 北枢纽 | 2 | 11.41| ||2024-01-01 01:00:00 |
北枢纽 | 3 | 32.11 | 2024-01-01 01:00:00 |
北枢纽 | 4 | 16.60 | 理想情况下,我想为“中心”列中的所有唯一条目创建一个新列,并对同一“中心”的相同日期时间的所有“结算点价格”进行平均。做这个的最好方式是什么?我试图让它成为这样的: |
日期时间
交货间隔 | 休斯顿中心 | 北中心 | 2024-01-01 01:00:00 |
---|---|---|---|
N/ A(平均) | 17.68 | 18.37 | 抱歉,我在这方面花了很长时间,而且我是初学者。谢谢! |
我尝试为每个独特的中心动态创建一个新的数据帧,但有人建议不要这样做,而且我无论如何也无法使平均值发挥作用。
I've tried to dynamically make a new dataframe for each of the unique hubs but someone recommended not to do this and I couldn't get the averaging to work anyway.
import pandas as pd
# 你的示例数据
df = pd.DataFrame({
'DateTime': ['2024-01-01 01:00:00'] * 7,
'Hub': ['Houston Hub', 'Houston Hub', 'Houston Hub', 'Houston Hub', 'North Hub', 'North Hub', 'North Hub'],
'Delivery Interval': [1, 2, 3, 4, 1, 2, 3],
'Settlement Point Price': [13.35, 16.60, 17.15, 23.61, 13.35, 11.41, 32.11]
})
# 使用 pivot_table 进行透视
result = df.pivot_table(index='Delivery Interval', columns='Hub', values='Settlement Point Price', aggfunc='mean')
# 添加平均值行
result.loc['N/A (Average)'] = result.mean()
print(result)
这将输出:
Hub Houston Hub North Hub
Delivery Interval
1 13.350000 13.350000
2 16.600000 11.410000
3 17.150000 32.110000
4 23.610000 NaN
N/A (Average) 17.677500 18.956667
说明:
-
pivot_table
: 我们使用 Pandas 的pivot_table
函数来重塑数据。 -
index='Delivery Interval'
:将“Delivery Interval”设置为新的索引。 -
columns='Hub'
:将“Hub”列中的唯一值用作新列。 -
values='Settlement Point Price'
:使用“Settlement Point Price”列中的值填充表格。 -
aggfunc='mean'
:对每个 Hub 和 Delivery Interval 组合使用mean
函数计算平均值。 -
loc['N/A (Average)'] = result.mean()
: 这行代码添加了一个名为“N/A (Average)”的新行,其中包含每列的平均值。
这个代码将创建一个透视表,其中“Delivery Interval”为索引,“Houston Hub”和“North Hub”为列,并且每个单元格中都包含相应组合的“Settlement Point Price”的平均值。
标签:python,pandas,dataframe From: 78780739