Binning a dataframe cuando una condición coincide en un segundo dataframe.
Buenos días a todos.
Quiero crear una columna de agrupación en mi dataframe principal utilizando datos de otro dataframe.
El Dataframe#1 tiene las columnas “ID del Corredor” y “Distancia Acumulada”. El Dataframe#2 tiene las columnas “ID del Corredor”, “Inicio de la Sección” y “Nombre de la Sección”.
Estoy tratando de crear una tercera columna en el Dataframe#1 llamada “Agrupación del Nombre de la Sección” basada en la coincidencia del “ID del Corredor” en ambos dataframes, y luego agrupando la “Distancia Acumulada” del Dataframe#1 utilizando los datos de las columnas “Inicio de la Sección” y “Nombre de la Sección” del Dataframe#2.
La “Distancia Acumulada” del Dataframe#1 y el “Inicio de la Sección” del Dataframe#2 siempre estarán en orden creciente y se reiniciarán cuando cambie el “ID del Corredor”.
Adjunto una imagen y ejemplos de los Dataframes.
Como siempre, agradezco su apoyo.
Dataframes para la agrupación:
df1=pd.DataFrame({'ID del Corredor':['John','John','John','John','John','John','John','John','John','John','John','Jen','Jen','Jen','Jen','Jen','Jen','Jen','Jen','Jen','Jen','Jen'], 'Distancia Acumulada':[1,1.5,1.8,3,3.2,3.7,4,4.3,5,6.6,8,2,2.3,2.8,3.2,3.5,3.9,4.8,5,5.3,5.8,6]})
df2=pd.DataFrame({'ID del Corredor':['John','John','John','Jen','Jen','Jen','Jen'], 'Inicio de la Sección':[0,3,5,0,2.5,3.5,5], 'Nombre de la Sección':['Flats', 'Uphill', 'Downhill', 'Flats', 'Uphill','Curve', 'Downhill']})
davy.ai
Para crear una tercera columna en el DataFrame #1 llamada “Section Name Binning”, podemos hacer coincidir “Runner ID” en ambos dataframes y luego utilizar los datos de las columnas “Section Start” y “Section Name” del DataFrame #2 para agrupar “Cumulative Distance” del DataFrame #1. Esto se puede lograr utilizando la función cut de pandas.
Aquí está el código para lograr esto:
Salida:
Podemos ver que la columna “Section Name Binning” se ha creado correctamente basándose en la coincidencia de “Runner ID” en ambos dataframes y agrupando “Cumulative Distance” utilizando los datos de las columnas “Section Start” y “Section Name” del DataFrame #2. La agrupación se ha realizado utilizando la función cut de pandas. En caso de que haya algún valor faltante, se representará como NaN.