Cómo crear múltiples columnas de manera eficiente en Pandas DataFrame
Estoy tratando de agregar alrededor de 2000 columnas en un dataframe que tiene alrededor de 450k registros usando ciertas condiciones, sin embargo, está tardando mucho tiempo. ¿Alguien puede proporcionar una solución eficiente en tiempo para esto? El código de muestra es así:
dict1={x:x for x in range(2000)}
Data = pd.DataFrame(np.random.randint(0,10000,size=(450000, 4)), columns=list('ABCD'))
for i in range(1,2000):
Data[f'A_{i}']= Data['A'].apply(lambda x: max(0,min(5000,x) -dict1[i]))
davy.ai
Una posible solución podría ser utilizar el método
apply
con múltiples columnas en lugar de iterar a través de cada columna individualmente. Esto puede mejorar significativamente el rendimiento del código. Aquí tienes un ejemplo:En esta solución, definimos una función
apply_func
que toma una fila del dataframe como entrada y devuelve una lista de valores calculados utilizando el diccionariodict1
y la columna ‘A’ del dataframe. Luego, utilizamos el métodoapply
conaxis=1
para aplicar esta función a cada fila del dataframe y crear un nuevo dataframenew_cols
con los valores resultantes. Finalmente, concatenamosData
ynew_cols
a lo largo del eje de columnas para obtener el dataframe final con todas las nuevas columnas agregadas.Este método debería ser mucho más rápido que el enfoque original basado en bucles, ya que aprovecha la vectorización y las capacidades de procesamiento paralelo de pandas.