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.

Python: Unir dos DataFrames con el mismo prefijo de columna en los mismos índices.

Tengo dos dataframes que se ven así:

df1 = pd.DataFrame(
{
“A_price”: [10, 12],
“B_price”: [20, 21],
},
index = [’01-01-2020′, ’01-02-2021′]
)
df1:
A_price B_price
01-01-2020 10 20
01-02-2021 12 21

df2 = pd.DataFrame(
{
“A_weight”: [0.1, 0.12],
“B_weight”: [0.2, 0.21],
},
index = [’01-01-2020′, ’01-02-2021′]
)
df2:
A_weight B_weight
01-01-2020 0.1 0.2
01-02-2021 0.12 0.21

¿Cómo puedo unir los dos dataframes en los mismos índices y luego tener las columnas en una jerarquía? Es decir, quiero lo siguiente:

df:
A B
price weight price weight
01-01-2020 10 0.1 20 0.2
01-02-2021 12 0.12 21 0.21

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para unir los dos dataframes en los mismos índices y crear un índice jerárquico de columnas, debe utilizar la función pd.concat() con el parámetro keys para especificar la jerarquía de las columnas:

    df = pd.concat([df1, df2], axis=1, keys=['price', 'weight'])
    

    Esto creará un nuevo dataframe df donde el primer nivel del índice de columna representa el precio o peso, y el segundo nivel representa la variable A o B. El parámetro axis=1 especifica que los dataframes deben concatenarse horizontalmente (es decir, basado en sus columnas), y el parámetro keys=['price', 'weight'] especifica los nombres de los nuevos niveles de columnas.

    Luego, puede acceder a las columnas con el índice jerárquico de la siguiente manera:

    df['price']['A']   # devuelve la columna 'A_price'
    df['weight']['B']  # devuelve la columna 'B_weight'
    

    Esto le daría la siguiente salida:

        A    B  
    price   10   20
    weight  0.1  0.2
    
        A     B  
    price   12   21
    weight  0.12 0.21
    

    Para reorganizar las columnas como se muestra en la salida deseada, puede utilizar los métodos .swaplevel() y .sort_index():

    df = df.swaplevel(axis=1).sort_index(axis=1)
    

    Esto cambiará el orden de los niveles de las columnas para que el primer nivel represente la variable A o B, y el segundo nivel represente el precio o peso. El método .sort_index() ordena el índice de las columnas en orden ascendente.

    Finalmente, puede acceder a las columnas con el índice reorganizado de la siguiente manera:

    df['A']['price']   # devuelve la columna 'A_price'
    df['B']['weight']  # devuelve la columna 'B_weight'
    

    Esto le daría la salida deseada:

             A              B         
          price weight   price weight
    01-01  10   0.10     20    0.20
    01-02  12   0.12     21    0.21
    

Comments are closed.