【问题标题】:Pandas:整理 groupby 聚合
【发布时间】:2022-01-21 14:44:32
【问题描述】:

在汇总某些内容后,我真的很难再次将表格整理成“正常”数据框。 我有一张这样的表格(列):

RnnSize     EmbSize     RnnLayer    Epochs  Alpha   Eval    Run     Result

所以我使用该命令计算了多次运行的 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')],
           )

我如何再次展平它,删除“结果”并将均值和标准置于与其余部分相同的“级别”? 有很多命令,如 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

【问题讨论】:

  • 能否将print(df.columns) 的结果添加到您的问题中?
  • 已添加,谢谢
  • 根据您的编辑,有两个stds。不应该是mean吗?
  • 我唯一能想到的是你运行的代码、你发布的代码、你得到的输出和你发布的输出之间的差异。无论如何,这并不重要。这个问题的答案还是一样的。
  • 好的。诡异的。对不起。我刚刚重新打开了笔记本,现在代码工作正常。也没有双列。这很奇怪!

标签: python pandas group-by aggregation


【解决方案1】:

你的情况

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 2019-08-10
      • 2017-11-03
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2020-01-28
      相关资源
      最近更新 更多