es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cálculos de resta columna por columna en Python 3

Parece algo sencillo, pero no logro encontrar una manera eficiente de resolver esto en Python 3: ¿Hay algún bucle que pueda usar en mi dataframe que tome cada columna después de la columna actual (comenzando con la primera columna) y la reste a la columna actual, para luego poder añadir esa columna resultante a un nuevo dataframe?

Esto es cómo se ve mi datos:

Esto es lo que tengo hasta ahora, pero al ejecutar run_analysis mi ecuación “result” muestra un error, y no sé cómo almacenar los resultados en un nuevo dataframe. Soy principiante en todo esto, así que cualquier ayuda sería muy apreciada.

storage = [] #contenedor que almacenará los resultados de las columnas restadas
def subtract(a, b): #función para llamar y realizar las restas por columna
    return a - b

def run_analysis(frame, store):
    for first_col_index in range(len(frame)): #encontrando la primera columna a usar
        temp = [] #lugar temporal para almacenar los valores de las columnas analizadas
        for sec_col_index in range(len(frame)): #encontrando la segunda columna a restar de la primera columna
            if sec_col_index <= first_col_index: #si la columna está debajo de la columna actual o es igual a ella,
                                                #entonces pasar a la siguiente columna
                continue
            else:
                result = [r for r in map(subtract, frame[sec_col_index], frame[first_col_index])]
            #si la columna está por encima de nuestra columna actual, restar los valores de la columna y guardar el resultado en temp
                temp.append(result)
        store.append(temp) #guardar el análisis completo en el contenedor
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay un bucle que puede usar en su dataframe que toma cada columna después de la columna actual y la resta de la columna actual. Una forma de hacer esto es usar bucles anidados para iterar sobre cada columna en el dataframe y realizar la operación de resta, mientras se almacenan los resultados en un nuevo dataframe. Aquí hay un ejemplo de código que logra esto:

    import pandas as pd
    
    # crea un dataframe de muestra
    df = pd.DataFrame({
        'A': [1, 2, 3],
        'B': [4, 5, 6],
        'C': [7, 8, 9]
    })
    
    # crea un nuevo dataframe para almacenar los resultados
    result_df = pd.DataFrame()
    
    # itera sobre cada columna en el dataframe
    for i, col in enumerate(df.columns):
        # itera sobre cada columna subsiguiente
        for j in range(i+1, len(df.columns)):
            # resta la columna j de la columna i
            result = df[col] - df[df.columns[j]]
            # crea un nuevo nombre de columna concatenando los nombres de columna originales
            new_col = col + '-' + df.columns[j]
            # agrega el resultado al nuevo dataframe
            result_df[new_col] = result
    
    # muestra el nuevo dataframe con los resultados
    print(result_df)
    

    Salida:

       A-B  A-C  B-C
    0   -3   -6   -3
    1   -3   -6   -3
    2   -3   -6   -3
    

    En este ejemplo, primero creamos un dataframe de muestra df con tres columnas (A, B, C). Luego creamos un dataframe vacío result_df para almacenar los resultados de la operación de resta. Usamos un bucle anidado para iterar sobre cada columna en df, y para cada columna, iteramos sobre cada columna subsiguiente (es decir, aquellas con un índice superior) y realizamos la operación de resta usando la función subtract de pandas. La columna resultante recibe un nuevo nombre al concatenar los nombres de columna originales, y se agrega al dataframe result_df. Finalmente, mostramos el dataframe result_df con los resultados.

Comments are closed.