Añadir columna en el dataframe de la lista

Tengo un dataframe con algunas columnas como esta:

ABC 0 4 5 6 7 7 6 5 

El rango posible de valores en A es solo de 0 a 7 .

Además, tengo una lista de 8 elementos como este:

 List=[2,5,6,8,12,16,26,32] //There are only 8 elements in this list 

Si el elemento en la columna A es n , necesito insertar el elemento n de la Lista en una nueva columna, diga ‘D’.

¿Cómo puedo hacer esto de una sola vez sin recorrer todo el dataframe?

El dataframe resultante se vería así:

 ABCD 0 2 4 12 5 16 6 26 7 32 7 32 6 26 5 16 

Nota: el dataframe es enorme y la iteración es la última opción. Pero también puedo organizar los elementos en ‘Lista’ en cualquier otra estructura de datos como dict, si es necesario.

IIUC, si convierte su (desafortunadamente nombrada) List en un ndarray , simplemente puede indexarla en forma natural.

 >>> import numpy as np >>> m = np.arange(16)*10 >>> m[df.A] array([ 0, 40, 50, 60, 150, 150, 140, 130]) >>> df["D"] = m[df.A] >>> df ABCD 0 0 NaN NaN 0 1 4 NaN NaN 40 2 5 NaN NaN 50 3 6 NaN NaN 60 4 15 NaN NaN 150 5 15 NaN NaN 150 6 14 NaN NaN 140 7 13 NaN NaN 130 

Aquí construí una nueva m , pero si usas m = np.asarray(List) , debería funcionar lo mismo: los valores en df.A seleccionarán los elementos apropiados de m .


Tenga en cuenta que si está utilizando una versión antigua de numpy , podría tener que usar m[df.A.values] en su lugar: en el pasado, numpy no jugaba bien con otros, y algunas refactorizaciones en pandas causaron algunos dolores de cabeza . Las cosas han mejorado ahora.

(Para los usuarios que solo buscan saber cómo asignar simplemente una lista como una nueva columna)

En realidad, un método más simple es simplemente asignar la lista directamente:

 df['new_col'] = mylist 

Alternativa
Asignar una serie:

 se = pd.Series(mylist) 

Incluso puedes simplemente asignar la matriz

 df['new_col'] = se.values # np.array(mylist) 

Una solución que mejora en la gran de @sparrow.

Deje df , sea su conjunto de datos y haga una lista de la lista con los valores que desea agregar al dataframe.

Supongamos que desea llamar a su nueva columna simplemente, new_column

Primero haga la lista en una serie:

 column_values = pd.Series(mylist) 

A continuación, utilice la función de inserción para agregar la columna. Esta función tiene la ventaja de permitirle elegir en qué posición desea colocar la columna. En el siguiente ejemplo, colocaremos la nueva columna en la primera posición desde la izquierda (estableciendo loc = 0)

 df.insert(loc=0, column='new_column', value=column_values) 

Primero creamos el dataframe que tenías, ignoraré las columnas B y C, ya que no son relevantes.

 df = pd.DataFrame({'A': [0, 4, 5, 6, 7, 7, 6,5]}) 

Y el mapeo que desees:

 mapping = dict(enumerate([2,5,6,8,12,16,26,32])) df['D'] = df['A'].map(mapping) 

¡Hecho!

 print df 

Salida:

  AD 0 0 2 1 4 12 2 5 16 3 6 26 4 7 32 5 7 32 6 6 26 7 5 16