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 pandas: Fusionar dos dataframes que no tienen coincidencias.

Escribí este código:

from numpy.random import randn
from numpy.random import seed
from scipy.stats import pearsonr
import pandas as pd

df = pd.read_csv('C:/ **** /gdp-per-capita-worldbank.csv')

df=df[df['Year']==2020]

df1 = pd.read_csv('C:/*****/crude-birth-rate.csv')

df1=df1[df1['Year']==2020]

Puse “*” solo por privacidad, pero en el código existe la ruta correcta. Ahora tengo que comparar los dos dataframes con una correlación de Pearson. El primer dataframe se ve así (A, B, C, etc. son estados):

State     GDP
A         45
B         90
C         70
D         20

El segundo dataframe se ve así (A, B, C, etc. son estados):

State     crude_birth_rate
A         3
B         2
Europe    30
C         1
Asia      40
K         4

Como puedes ver, los dos dataframes no están correctamente emparejados.

El resultado deseado debería ser otro dataframe como este:

State     GDP     crude_birth_rate
A         45      3
B         90      2
C         70      1

Entonces, los dataframes finales deberían estar compuestos por cada estado y con el PIB y la tasa de natalidad en 2020 en línea, y otros estados o grupos que no coincidan deberían eliminarse.

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para fusionar los dos dataframes basados en su columna común “State”, podemos usar la función “merge” de pandas.

    El código para fusionar los dos dataframes y calcular la correlación de Pearson se vería así:

    merged_df = pd.merge(df, df1, on="State")
    corr, _ = pearsonr(merged_df["GDP"], merged_df["crude_birth_rate"])
    

    La función “pd.merge” fusiona los dos dataframes basados en su columna común “State” y crea un nuevo dataframe que solo incluye las filas coincidentes para ambos dataframes. El parámetro “on” especifica el nombre de la columna común utilizada para la fusión.

    Después de fusionar los dos dataframes, podemos calcular la correlación de Pearson entre las columnas “GDP” y “crude_birth_rate” en el dataframe resultante “merged_df”. Podemos usar la función “pearsonr” del módulo “scipy.stats” para calcular el coeficiente de correlación y el valor p. En este caso, solo almacenamos el coeficiente de correlación, representado por “corr”.

    Para filtrar el dataframe resultante “merged_df” y solo incluir las filas donde la columna “Year” sea igual a 2020, podemos modificar el código original agregando una condición adicional a la función “pd.merge” de esta manera:

    merged_df = pd.merge(df[df["Year"] == 2020],
                         df1[df1["Year"] == 2020],
                         on="State")
    

    Ahora, el dataframe resultante “merged_df” contendrá solo las filas donde ambos dataframes tienen una columna “Year” igual a 2020, como se especifica en la condición agregada “[df/df1][“Year”] == 2020″.

    Finalmente, para eliminar cualquier estado o grupo que no presente coincidencias, simplemente podemos modificar el código para incluir solo las columnas “State”, “GDP” y “crude_birth_rate” en el dataframe resultante de esta manera:

    merged_df = merged_df[["State", "GDP", "crude_birth_rate"]]
    

    Esto creará un nuevo dataframe que solo contiene las columnas “State”, “GDP” y “crude_birth_rate”, eliminando cualquier estado o grupo que no presente coincidencias.

Comments are closed.