Tengo un conjunto de datos con 19 columnas y aproximadamente 250k filas. He trabajado con conjuntos de datos más grandes, pero esta vez, Pandas decidió jugar con mis nervios.
Traté de dividir el conjunto de datos original en 3 subtramas de datos basados en algunas reglas simples. Sin embargo, lleva mucho tiempo ejecutar el código. Unos 15-20 segundos solo para el filtrado.
¿Alguna forma alternativa de mejorar el rendimiento del código?
import pandas as pd
#read dataset
df = pd.read_csv('myData.csv')
#create a dataframe with col1 10 and col2 <= 15
df1 = df[(df.col1 == 10) & (df.col2 <= 15)]
df = df[~df.isin(df1)].dropna()
#create a dataframe with col3 7 and col4 >= 4
df2 = df[(df.col3 == 7) & (df.col4 >= 4)]
df = df[~df.isin(df2)].dropna()
Al final, tengo los df1, df2, dfmarcos de datos con los datos filtrados.
fuente

¿Ha cronometrado qué línea de su código consume más tiempo? Sospecho que la línea
df = df[~df.isin(df1)].dropna()tomaría mucho tiempo. ¿Sería más rápido si se utiliza simplemente la negación de la condición que se aplica para obtenerdf1, cuando se desea filtrar filas de distancia dedf1dedf?Es decir, uso
df = df[(df.col1 != 10) | (df.col2 > 15)].fuente
Además de las sugerencias en las otras respuestas, ayuda si agregamos los campos de búsqueda al índice de DataFrame. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html
Pandas DataFrames también admite múltiples índices. Ref: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
Un ejemplo se puede encontrar aquí https://stackoverflow.com/a/58061800/2130670
fuente