Digamos que tengo un marco de datos

df = pd.DataFrame({'A':[0,1],'B':[2,3]})

    A   B
0   0   2
1   1   3

Luego tengo una serie generada por alguna otra función que utiliza entradas de la primera fila de df pero que no se superpone con la df existente

s = pd.Series ({'C':4,'D':6})

C    4
D    6

Ahora quiero agregar s a df.loc[0] con las claves convirtiéndose en nuevas columnas y los valores agregados solo a esta primera fila. El resultado final para df debería verse así:

    A   B   C   D
0   0   2   4   6
1   1   3   NaN NaN

¿Como podría hacerlo? Preguntas similares que he encontrado solo parecen hacer esto para una columna o simplemente agregar la Serie como una nueva fila al final del DataFrame, pero no actualizar una fila existente agregando múltiples columnas nuevas de una Serie.

Intenté df.loc[0,list(['C','D'])] = [4,6], que se sugirió en otra respuesta, pero eso solo funciona si ['C','D'] ya son columnas existentes en el Marco de datos. df.assign(**s) funciona pero luego asigna los valores de la Serie a todas las filas.

2
paul 4 jun. 2018 a las 22:59

1 respuesta

La mejor respuesta

join con transposición:

df.join(pd.DataFrame(s).T)

   A  B    C    D
0  0  2  4.0  6.0
1  1  3  NaN  NaN

O use concat

pd.concat([df, pd.DataFrame(s).T], axis=1)

   A  B    C    D
0  0  2  4.0  6.0
1  1  3  NaN  NaN
4
user3483203 4 jun. 2018 a las 20:03