AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79575741
Accepted
Carlo Allocca
Carlo Allocca
Asked: 2025-04-16 01:38:39 +0800 CST2025-04-16 01:38:39 +0800 CST 2025-04-16 01:38:39 +0800 CST

Adicionar uma nova linha como média das colunas

  • 772

Dê o seguinte dataframe:

 _BETTER     _SAME    _WORSE   ___dataset     Metric
  0.373802  0.816794  0.568783      Train      precision
  0.391304  0.865229  0.519324      Train      recall
  0.382353  0.840314  0.542929      Train      f1-score
  0.500000  1.000000  0.583333      Val        precision
  0.333333  1.000000  0.736842      Val        recall
  0.400000  1.000000  0.651163      Val        f1-score
  0.000000  0.000000  0.666667      Test       precision
  0.000000  0.000000  0.500000      Test       recall
  0.000000  0.000000  0.571429      Test       f1-score

gostaria de acrescentar o seguinte:

 _BETTER     _SAME    _WORSE   ___dataset     Metric
  0.373802  0.816794  0.568783      Train      precision
  0.391304  0.865229  0.519324      Train      recall
  0.382353  0.840314  0.542929      Train      f1-score
  0.500000  1.000000  0.583333      Val        precision
  0.333333  1.000000  0.736842      Val        recall
  0.400000  1.000000  0.651163      Val        f1-score
  0.000000  0.000000  0.666667      Test       precision
  0.000000  0.000000  0.500000      Test       recall
  0.000000  0.000000  0.571429      Test       f1-score
  mean_p_b  mean_p_s  mean_p_w       All       precision_avg
  mean_r_b  mean_r_s  mean_r_w       All       recall_avg
  mean_f1_b mean_f1_s mean_f1_w      All       f1_score_avg

onde mean_p_b mean_p_s mean_p_w é obtido pela média da linha de precisão, em relação às três colunas, respectivamente. Da mesma forma, mean_r_b mean_r_s mean_r_w e mean_f1_b mean_f1_s mean_f1_w.

Aplicando cada um separadamente:

 df_avg_precision["BETTER"] = (df_train_precision['_BETTER'].values + df_val_precision['_BETTER'].values + 
 df_test_precision['_BETTER'].values)/3
 df_avg_precision["Metric"] = "precision_avg"
 df_avg_recall["BETTER"] = (df_train_recall['_BETTER'].values + 
 df_val_recall['_BETTER'].values + df_test_recall['_BETTER'].values)/3
 df_avg_recall["Metric"] = "recall_avg"
 df_avg_f1["BETTER"] = (df_train_f1['_BETTER'].values + 
 df_val_f1['_BETTER'].values + df_test_f1['_BETTER'].values)/3
 df_avg_f1["Metric"] = "f1_avg"`
    
python
  • 2 2 respostas
  • 85 Views

2 respostas

  • Voted
  1. Best Answer
    furas
    2025-04-16T03:53:49+08:002025-04-16T03:53:49+08:00

    Você pode usar df.groupby(...).mean(...)para isso

    series_metric_mean = df.groupby('Metric').mean(['_BETTER', '_SAME', '_WORSE'])
    
                _BETTER     _SAME    _WORSE
    Metric                                 
    f1-score   0.260784  0.613438  0.588507
    precision  0.291267  0.605598  0.606261
    recall     0.241546  0.621743  0.585389
    

    (para manter f1-scorecomo última linha necessária groupb(..., sort=False))


    Ele fornece Seriesapenas com _BETTER, _SAME, _WORSE(e Metriccomo índice), então ele precisa

    • adicione __datasetcom All.
    • adicione o sufixo _avgem Metric(neste momento ainda está como índice).
    • convertê-lo para DataFrame()(usando reset_index()- ele converte o índice Metricpara coluna normal).
    • concatanexá-lo aos dados originais.
    series_metric_mean['___dataset'] = 'All'
    
    series_metric_mean.index = series_metric_mean.index + '_avg'
    
    df_metric_mean = series_metric_mean.reset_index()
    
    df = pd.concat([df, df_metric_mean]).reset_index(drop=True)
    

    Código funcional completo com dados de exemplo em formato de texto.
    Eu o utilizo ioapenas para criar objetos do tipo arquivo, para que todos possam simplesmente copiá-lo e executá-lo.

    text1 = """_BETTER     _SAME    _WORSE   ___dataset     Metric
      0.373802  0.816794  0.568783      Train      precision
      0.391304  0.865229  0.519324      Train      recall
      0.382353  0.840314  0.542929      Train      f1-score
      0.500000  1.000000  0.583333      Val        precision
      0.333333  1.000000  0.736842      Val        recall
      0.400000  1.000000  0.651163      Val        f1-score
      0.000000  0.000000  0.666667      Test       precision
      0.000000  0.000000  0.500000      Test       recall
      0.000000  0.000000  0.571429      Test       f1-score
    """
    
    # example from @Adeva1 answer 
    text2 = """_BETTER     _SAME    _WORSE ___dataset     Metric
    0.568783  0.568783  0.568783    Train  precision
    0.519324  0.519324  0.519324    Train     recall
    0.542929  0.542929  0.542929    Train   f1-score
    0.583333  0.583333  0.583333      Val  precision
    0.736842  0.736842  0.736842      Val     recall
    0.651163  0.651163  0.651163      Val   f1-score
    0.651163  0.651163  0.651163     Test  precision
    0.500000  0.500000  0.500000     Test     recall
    0.571429  0.571429  0.571429     Test   f1-score
    """
    
    import pandas as pd
    import io
    
    df = pd.read_csv(io.StringIO(text1), sep='\\s+')
    #print(df)
    
    series_metric_mean = df.groupby('Metric', sort=False).mean(['_BETTER', '_SAME', '_WORSE'])
    
    series_metric_mean['___dataset'] = 'All'
    series_metric_mean.index = series_metric_mean.index + '_avg'
    print(series_metric_mean)
    
    df_metric_mean = series_metric_mean.reset_index()
    print(df_metric_mean)
    
    df = pd.concat([df, df_metric_mean]).reset_index(drop=True)
    print(df)
    

    Resultado (para text1)

                    _BETTER     _SAME    _WORSE ___dataset
    Metric                                                
    f1-score_avg   0.260784  0.613438  0.588507        All
    precision_avg  0.291267  0.605598  0.606261        All
    recall_avg     0.241546  0.621743  0.585389        All
    
              Metric   _BETTER     _SAME    _WORSE ___dataset
    0   f1-score_avg  0.260784  0.613438  0.588507        All
    1  precision_avg  0.291267  0.605598  0.606261        All
    2     recall_avg  0.241546  0.621743  0.585389        All
    
         _BETTER     _SAME    _WORSE ___dataset         Metric
    0   0.373802  0.816794  0.568783      Train      precision
    1   0.391304  0.865229  0.519324      Train         recall
    2   0.382353  0.840314  0.542929      Train       f1-score
    3   0.500000  1.000000  0.583333        Val      precision
    4   0.333333  1.000000  0.736842        Val         recall
    5   0.400000  1.000000  0.651163        Val       f1-score
    6   0.000000  0.000000  0.666667       Test      precision
    7   0.000000  0.000000  0.500000       Test         recall
    8   0.000000  0.000000  0.571429       Test       f1-score
    9   0.291267  0.605598  0.606261        All  precision_avg
    10  0.241546  0.621743  0.585389        All     recall_avg
    11  0.260784  0.613438  0.588507        All   f1-score_avg
    

    Resultado (por text2exemplo da resposta de @Adeva1)

                _BETTER     _SAME    _WORSE
    Metric                                 
    precision  0.601093  0.601093  0.601093
    recall     0.585389  0.585389  0.585389
    f1-score   0.588507  0.588507  0.588507
    
                    _BETTER     _SAME    _WORSE ___dataset
    Metric                                                
    precision_avg  0.601093  0.601093  0.601093        All
    recall_avg     0.585389  0.585389  0.585389        All
    f1-score_avg   0.588507  0.588507  0.588507        All
    
              Metric   _BETTER     _SAME    _WORSE ___dataset
    0  precision_avg  0.601093  0.601093  0.601093        All
    1     recall_avg  0.585389  0.585389  0.585389        All
    2   f1-score_avg  0.588507  0.588507  0.588507        All
    
         _BETTER     _SAME    _WORSE ___dataset         Metric
    0   0.568783  0.568783  0.568783      Train      precision
    1   0.519324  0.519324  0.519324      Train         recall
    2   0.542929  0.542929  0.542929      Train       f1-score
    3   0.583333  0.583333  0.583333        Val      precision
    4   0.736842  0.736842  0.736842        Val         recall
    5   0.651163  0.651163  0.651163        Val       f1-score
    6   0.651163  0.651163  0.651163       Test      precision
    7   0.500000  0.500000  0.500000       Test         recall
    8   0.571429  0.571429  0.571429       Test       f1-score
    9   0.601093  0.601093  0.601093        All  precision_avg
    10  0.585389  0.585389  0.585389        All     recall_avg
    11  0.588507  0.588507  0.588507        All   f1-score_avg
    

    Doutor:

    • pandas.DataFrame.groupby
    • Mesclar, unir, concatenar e comparar
    • 2
  2. Adeva1
    2025-04-16T02:35:18+08:002025-04-16T02:35:18+08:00

    Você pode tentar algo assim:

    for metric in df['Metric'].unique(): # Obtain list of unique metric values
        metric_mean = []
        for col in df.columns[:-2].tolist(): # Obtain list of relevant df columns
            mean_value = df[df['Metric'] == metric][col].mean() 
            metric_mean.append(mean_value)
        df.loc[len(df)] = metric_mean + ['All', f'{metric}_avg'] # Append row to column
    

    Entrada (Exemplo)

        _BETTER     _SAME    _WORSE _dataset     Metric
    0  0.568783  0.568783  0.568783    Train  precision
    1  0.519324  0.519324  0.519324    Train     recall
    2  0.542929  0.542929  0.542929    Train   f1-score
    3  0.583333  0.583333  0.583333      Val  precision
    4  0.736842  0.736842  0.736842      Val     recall
    5  0.651163  0.651163  0.651163      Val   f1-score
    6  0.651163  0.651163  0.651163     Test  precision
    7  0.500000  0.500000  0.500000     Test     recall
    8  0.571429  0.571429  0.571429     Test   f1-score
    

    Saída

         _BETTER     _SAME    _WORSE _dataset     Metric
    0   0.568783  0.568783  0.568783    Train  precision
    1   0.519324  0.519324  0.519324    Train     recall
    2   0.542929  0.542929  0.542929    Train   f1-score
    3   0.583333  0.583333  0.583333      Val  precision
    4   0.736842  0.736842  0.736842      Val     recall
    5   0.651163  0.651163  0.651163      Val   f1-score
    6   0.651163  0.651163  0.651163     Test  precision
    7   0.500000  0.500000  0.500000     Test     recall
    8   0.571429  0.571429  0.571429     Test   f1-score
    9   0.601093  0.601093  0.601093      All  precision_avg
    10  0.585389  0.585389  0.585389      All     recall_avg
    11  0.588507  0.588507  0.588507      All   f1-score_avg
    
    • 0

relate perguntas

  • Como divido o loop for em 3 quadros de dados individuais?

  • Como verificar se todas as colunas flutuantes em um Pandas DataFrame são aproximadamente iguais ou próximas

  • Como funciona o "load_dataset", já que não está detectando arquivos de exemplo?

  • Por que a comparação de string pandas.eval() retorna False

  • Python tkinter/ ttkboostrap dateentry não funciona quando no estado somente leitura

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve