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 / 78114575
Accepted
Swawa
Swawa
Asked: 2024-03-06 20:58:23 +0800 CST2024-03-06 20:58:23 +0800 CST 2024-03-06 20:58:23 +0800 CST

Soma por linha de cálculos de elemento único em Python

  • 772

Eu gostaria de fazer um cálculo por linha com elementos únicos de um dataframe do pandas e elementos de uma lista e, finalmente, fazer a soma por linha de todos esses cálculos:

insira a descrição da imagem aqui

O número de itens da lista x_i é idêntico ao número de colunas n_i no dataframe. Eu gostaria de calcular somas por linha como

Minha solução resulta apenas em 4 valores conforme faço um loop no número de colunas. Mas eu também poderia percorrer o número de elementos da lista, o que não altera o resultado.

result = []
for i in range(len(df_n.columns)):   # these are 4
        total = sum(2/3 * x[i]**2 * df_n.iloc[i])
        result.append(total)
print(result)

usando mass = (math.pi/6 * binning[i]**3 * roh_solid * counts_nc.iloc[i]).sum()resultados no mesmo

O próximo teste seria um loop adicional ao longo do comprimento do dataframe. Um loop dentro de um loop parece uma programação Python muito ruim. Preciso usar duas variáveis ​​de loop para resolver isso?

Existe uma maneira otimizada do Python para resolver isso? Ou você pode me dar uma dica para uma pergunta semelhante sobre qual solução não encontrei com a função de pesquisa?

um exemplo de lista:

list = [0.4012, 0.551, 0.8124, 1.1402] 

Um exemplo de quadro de dados:

                        n_1          n_2            n_3            n_4  \
time                                                                          
2022-03-18 07:16:54  1.000000e-15  1.000000e-15  1.000000e-15  1.000000e-15   
2022-03-18 07:16:55  7.887821e-01  4.929888e-02  1.000000e-15  1.000000e-15   
2022-03-18 07:16:56  2.030013e+00  1.268758e-01  1.000000e-15  1.000000e-15   
2022-03-18 07:16:57  2.944119e+00  3.236459e-01  1.000000e-15  4.654615e-02   
2022-03-18 07:16:58  3.318537e+00  4.064088e-01  1.000000e-15  6.206153e-02

(a coluna de tempo é uma coluna de índice aqui.)

python
  • 1 1 respostas
  • 35 Views

1 respostas

  • Voted
  1. Best Answer
    mozway
    2024-03-06T21:02:09+08:002024-03-06T21:02:09+08:00

    Parece que você pode simplesmente vetorizar sua operação:

    lst = [0.4012, 0.551, 0.8124, 1.1402] 
    
    out = df.mul(2/3*np.array(lst)**2).sum(axis=1)
    

    Saída:

    time
    2022-03-18 07:16:54    1.616408e-15
    2022-03-18 07:16:55    9.462046e-02
    2022-03-18 07:16:56    2.435156e-01
    2022-03-18 07:16:57    4.217743e-01
    2022-03-18 07:16:58    4.921507e-01
    dtype: float64
    

    sobre seu código

    Acho que há dois erros principais no seu código

    • você divide as colunas incorretamente ( df_n.iloc[i]fornece a i-ésima linha, não a coluna). Você deveria usardf_n.iloc[:, i]
    • sum(2/3 * x[i]**2 * df_n.iloc[:, i])calcularia o total por coluna, e é por isso que você acaba com 4 valores. No entanto, sua definição de Totalsomas i(nas colunas). Você deve ter 5 valores na saída.

    Assim, corrigir a primeira parte do seu código daria:

    result = []
    for i in range(len(df_n.columns)):   # these are 4
            total = sum(2/3 * x[i]**2 * df_n.iloc[:, i])
            result.append(total)
    
    print(result)
    # [0.9745089642303895, 0.18342143066492023, 2.1999792e-15, 0.09413071358292742]
    

    O que equivale a:

    df_n.mul(2/3*np.array(x)**2).sum()
    
    n_1    9.745090e-01
    n_2    1.834214e-01
    n_3    2.199979e-15
    n_4    9.413071e-02
    dtype: float64
    

    Mas acredito que o que você realmente precisa é:

    result = []
    for i in range(len(df_n.columns)):   # these are 4
            total = (2/3 * x[i]**2 * df_n.iloc[:, i])
            result.append(total)
    
    # sum per row
    result = list(map(sum, zip(*result)))
    
    print(result)
    [1.6164081600000003e-15, 0.09462046128607064, 0.24351562363634796, 0.42177430406900446, 0.4921507194868146]
    

    Que, como mostrado acima, é vetorizado para:

    df_n.mul(2/3*np.array(x)**2).sum(axis=1)
    
    time
    2022-03-18 07:16:54    1.616408e-15
    2022-03-18 07:16:55    9.462046e-02
    2022-03-18 07:16:56    2.435156e-01
    2022-03-18 07:16:57    4.217743e-01
    2022-03-18 07:16:58    4.921507e-01
    dtype: float64
    
    • 1

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

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

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 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

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 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
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +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
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +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