Saltar al contenido

Manera más eficiente de agregar columnas con el mismo string valores en múltiples marcos de datos con bucles o lambdas?

Contamos con la respuesta a este disgusto, o por lo menos eso esperamos. Si presentas interrogantes puedes dejarlo en el apartado de comentarios, que con gusto te responderemos

Solución:

Puedes usar pd.concat con keys parámetro entonces reset_index:

pd.concat([df0,df1,df2,df3], keys=['df0', 'df1', 'df2', 'df3']).reset_index(level=0) 

MCVE:

df0  = pd.DataFrame(np.ones((3,3)), columns=[*'ABC'])
df1  = pd.DataFrame(np.zeros((3,3)), columns=[*'ABC'])
df2  = pd.DataFrame(np.zeros((3,3))+3, columns=[*'ABC'])
df3  = pd.DataFrame(np.zeros((3,3))+4, columns=[*'ABC'])

df_out = pd.concat([df0,df1,df2,df3], keys=['df0', 'df1', 'df2', 'df3']).reset_index(level=0)
df_out

Producción:

  level_0    A    B    C
0     df0  1.0  1.0  1.0
1     df0  1.0  1.0  1.0
2     df0  1.0  1.0  1.0
0     df1  0.0  0.0  0.0
1     df1  0.0  0.0  0.0
2     df1  0.0  0.0  0.0
0     df2  3.0  3.0  3.0
1     df2  3.0  3.0  3.0
2     df2  3.0  3.0  3.0
0     df3  4.0  4.0  4.0
1     df3  4.0  4.0  4.0
2     df3  4.0  4.0  4.0

def add_column(df, col_name, col_value):
  return df.insert(loc=-1, column=col_name, value=col_value, allow_duplicates = False)

df_list = [........]
col_name = ... 
col_value = .... # copy column (Category) values

res = map(lambda df: add_column(df, col_name, col_value), df_list)
list(res)

Mantenlo simple y explícito.

for col_val, df in [
   ('df61_p1', df61_p1),
   ('df61_p2', df61_p2),
   ('df61_p3', df61_p3),
   ('df61_p4', df61_p4),
   ('df61_p5', df61_p5),
   ('df61_p6', df61_p6),
   ('df61_p7', df61_p7),
   ('df61_p8', df61_p8),
]:
    df['Category'] = col_val

Si bien ciertamente hay más formas de 'metaprogramación-ey' de realizar la misma tarea, generalmente son bastante intrincadas y más complicadas de entender y refactorizar.

Sin embargo, dada la estructura de este código, imagino que hay formas de deshacerse de este problema incluso antes de llegar a este punto.

Por ejemplo, ¿en qué momento se dividieron esos marcos de datos? Tal vez al nunca usar DataFrames separados en primer lugar [keep the original dataframe together/concat at beginning] (y usando las operaciones de aplicar, agrupar, pivotar y fundir según sea necesario), puede evitar este problema por completo.

valoraciones y reseñas

Tienes la posibilidad dar difusión a esta sección si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.