Pandas groupby 获取特定格式的平均值
Pandas groupby to get mean in a certain format
我有以下数据框 df
:
输出[15]:
Run_299 Run_300 Month Date bkt
DateTime
2024-12-31 21:00:00 13 18 2024-12-01 2024-12-31 p
2024-12-31 21:00:00 11 12 2024-12-01 2024-12-31 p
2024-12-31 22:00:00 2 5 2024-12-01 2024-12-31 q
2024-12-31 23:00:00 113 118 2024-12-01 2023-11-30 p
2025-01-01 00:00:00 110 114 2025-01-01 2023-11-30 p
我正在尝试进行以下平均计算:
Date bkt mean
2024-12-31 p 13.5
2023-11-30 q 3.5
2023-11-30 p 113.75
其中:
13.5 = average(13, 18, 11, 12)
3.5 =average(2, 5)
113.75=average(113, 118, 110, 114)
我试过了:
df.groupby(['Date', 'bkt']).mean()
但平均值并没有按预期发生。我仍然得到 Run_299
和 Run_300
列
编辑:
我更改了 average
以表明我正在尝试计算平均值
IIUC 使用 stack
和 groupby
new_df = (
df.set_index(["Date", "bkt"])
.filter(like="Run")
.stack()
.groupby(level=[0, 1])
.mean()
.reset_index()
.rename(columns={0: "Run Mean"})
)
print(new_df)
Date bkt Run Mean
0 2023-11-30 p 113.75
1 2024-12-31 p 13.50
2 2024-12-31 q 3.50
在 groupby
之前使用 melt
df_final = (df.melt(['Month','Date','bkt'], value_name='Run_mean')
.groupby(['Date', 'bkt']).mean())
Out[202]:
Run_mean
Date bkt
2023-11-30 p 113.75
2024-12-31 p 13.50
q 3.50
我有以下数据框 df
:
输出[15]:
Run_299 Run_300 Month Date bkt
DateTime
2024-12-31 21:00:00 13 18 2024-12-01 2024-12-31 p
2024-12-31 21:00:00 11 12 2024-12-01 2024-12-31 p
2024-12-31 22:00:00 2 5 2024-12-01 2024-12-31 q
2024-12-31 23:00:00 113 118 2024-12-01 2023-11-30 p
2025-01-01 00:00:00 110 114 2025-01-01 2023-11-30 p
我正在尝试进行以下平均计算:
Date bkt mean
2024-12-31 p 13.5
2023-11-30 q 3.5
2023-11-30 p 113.75
其中:
13.5 = average(13, 18, 11, 12)
3.5 =average(2, 5)
113.75=average(113, 118, 110, 114)
我试过了:
df.groupby(['Date', 'bkt']).mean()
但平均值并没有按预期发生。我仍然得到 Run_299
和 Run_300
编辑:
我更改了 average
以表明我正在尝试计算平均值
IIUC 使用 stack
和 groupby
new_df = (
df.set_index(["Date", "bkt"])
.filter(like="Run")
.stack()
.groupby(level=[0, 1])
.mean()
.reset_index()
.rename(columns={0: "Run Mean"})
)
print(new_df)
Date bkt Run Mean
0 2023-11-30 p 113.75
1 2024-12-31 p 13.50
2 2024-12-31 q 3.50
在 groupby
之前使用melt
df_final = (df.melt(['Month','Date','bkt'], value_name='Run_mean')
.groupby(['Date', 'bkt']).mean())
Out[202]:
Run_mean
Date bkt
2023-11-30 p 113.75
2024-12-31 p 13.50
q 3.50