Tengo 3 marcos de datos de pandas. Me gustaría agregar una fila de cada iteración a un marco de datos existente.

Ejemplo que se muestra a continuación:

DF1 =

col1 col2 col3
a     a    a
d     d    d
g     g    g

DF2=

col1 col2 col3
b     b    b
e     e    e
h     h    h

DF3=

col1 col2 col3
c     b    b
f     f    f
i     i    i

clean_DF =

col1 col2 col3
a     a    a
b     b    b 
c     c    c
d     d    d
e     e    e
f     f    f
g     g    g
h     h    h 
i     i    i

Código ficticio:

for i,j in df1.itterows():
   for a,b in df2.itterows():
       for c,d in df2.itterrows():
clean_df.append(i,j,a,b,c,d)

¿Podría alguien señalarme en la dirección correcta?

0
m3214 10 ene. 2022 a las 17:28

1 respuesta

La mejor respuesta

Concatenelos, usando el argumento keys para asociar un índice con filas de cada marco de datos original, luego intercambie los niveles de índice y ordene el marco de datos por este índice.

df1 = pd.DataFrame([["a", "a", "a"], ["d", "d", "d"], ["g", "g", "g"]], columns=["col1", "col2", "col3"])
df2 = pd.DataFrame([["b", "b", "b"], ["e", "e", "e"], ["h", "h", "h"]], columns=["col1", "col2", "col3"])
df3 = pd.DataFrame([["c", "c", "c"], ["f", "f", "f"], ["i", "i", "i"]], columns=["col1", "col2", "col3"])
clean_df = pd.concat([df1, df2, df3], keys=range(3)).swaplevel().sort_index()

Esto supone que cada marco de datos actualmente tiene un solo índice y está ordenado por ese índice. Si tiene marcos de datos que no se pueden ordenar por índice y desea conservar sus órdenes de clasificación actuales, puede restablecer sus índices antes de concatenarlos.

dfs = [df.reset_index() for df in [df1, df2, df3]]
clean_df = pd.concat(dfs, keys=range(len(dfs))).swaplevel().sort_index()
1
Stuart 10 ene. 2022 a las 19:05