Pandas:整理groupby聚合

Pandas: Tidy up groupby aggregation

我真的很难在聚合一些东西后再次将 table 整理成一个“正常”数据框。 我有一个这样的 table(列):

RnnSize     EmbSize     RnnLayer    Epochs  Alpha   Eval    Run     Result

所以我使用该命令计算了多次运行结果列的平均值和标准差:

df.groupby(["RnnSize", "EmbSize", "RnnLayer", "Epochs", "Alpha", "Eval"]).agg({'Result': ['mean', 'std']})

输出是这样的 DataFrame:

                                                             Result
                                                             mean   std
RnnSize     EmbSize     RnnLayer    Epochs  Alpha   Eval        

看起来有点像三级。

df.columns 输出以下多重索引:

MultiIndex([(   'index',    ''),
            ( 'RnnSize',    ''),
            ( 'EmbSize',    ''),
            ('RnnLayer',    ''),
            (  'Epochs',    ''),
            (   'Alpha',    ''),
            (    'Eval',    ''),
            (  'Result', 'std'),
            (  'Result', 'std')],
           )

我如何再次将其展平,删除“Result”并将 mean 和 std 置于与其余部分相同的“水平”? 有很多命令,例如 reset_index、drop_level 等等,但我还没有找到解决方法。这让我很困惑。

编辑:为了可重现性,这里是我的全部代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dfRuns = pd.read_csv("Results.csv", encoding="utf-8")
dfRuns

dfAv = dfRuns.copy()
dfAv = dfAv.groupby(["RnnSize", "EmbSize", "RnnLayer", "Epochs", "Alpha", "Eval"]).agg({'Result': ['mean', 'std']})

和(缩短的)csv 文件Results.csv:

RnnSize,EmbSize,RnnLayer,Epochs,Alpha,Eval,Run,Result
128,200,2,150,0.1,Precision,1,0.5940
128,200,2,150,0.1,Recall,1,0.5038
128,200,2,150,0.1,F1,1,0.5144
128,200,2,150,0.1,Precision,2,0.5851
128,200,2,150,0.1,Recall,2,0.4995
128,200,2,150,0.1,F1,2,0.5082

使用reset_index()然后展平索引:

df = df.reset_index()
df.columns = [' '.join(col).rstrip() for col in df.columns.to_numpy()]

你的情况

df.groupby(["RnnSize", "EmbSize", "RnnLayer", "Epochs", "Alpha", "Eval"])['Result'].agg(['mean', 'std'])