Paquete de columnas de dataframe para listar en pandas

Necesito empaquetar las columnas de pandas DataFrame en una columna que contenga listas. Ejemplo:

por

>>>df abc 0 81 88 1 1 42 7 23 2 8 37 63 3 18 22 20 

hacer la columna de la lista:

  list_col 0 [81,88,1] 1 [42,7,23] 2 [8,37,63] 3 [18,22,20] 

Si lo bash

df.apply (lista, eje = 1)

python devuelve el mismo DataFrame.

En caso de que lo intente

 >>> df.apply(lambda r:{'list_col':list(r)},axis=1) abc 0 NaN NaN NaN 1 NaN NaN NaN 2 NaN NaN NaN 3 NaN NaN NaN 

no está trabajando.

Incluso el método brutal

 >>> df['list_col'] = '' >>> for i in df.index: df.ix[i,'list_col'] = list(df.ix[i,df.columns[:-1]]) 

devuelve error:

 Traceback (most recent call last): File "", line 2, in  df.ix[i,'list_col'] = list(df.ix[i,df.columns[:-1]]) File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 88, in __setitem__ self._setitem_with_indexer(indexer, value) File "C:\Anaconda\lib\site-packages\pandas\core\indexing.py", line 158, in _setitem_with_indexer len(self.obj[labels[0]]) == len(value) or len(plane_indexer[0]) == len(value)): TypeError: object of type 'int' has no len() 

El único método de trabajo que encontré es:

 df['list_col'] = df.apply(lambda r:{df.columns[0]:list(r)}, axis=1)[df.columns[0]] 

Esto me da lo que quiero pero tal vez hay una manera más directa?

Simplemente asigne la columna como una lista en df.values hará:

 df['list_col'] = list(df.values) df abc list_col 0 81 88 1 [81, 88, 1] 1 42 7 23 [42, 7, 23] 2 8 37 63 [8, 37, 63] 3 18 22 20 [18, 22, 20] 

Aquí hay un enfoque vectorizado, que es muy similar a la solución de @ Anzel :

 In [55]: df Out[55]: abc 0 81 88 1 1 42 7 23 2 8 37 63 3 18 22 20 In [56]: df['list_col'] = df.values.tolist() In [57]: df Out[57]: abc list_col 0 81 88 1 [81, 88, 1] 1 42 7 23 [42, 7, 23] 2 8 37 63 [8, 37, 63] 3 18 22 20 [18, 22, 20] 

Tiempo contra 4M filas DF:

 In [69]: df.shape Out[69]: (4000000, 3) In [70]: %timeit list(df.values) 1 loop, best of 3: 2.04 s per loop In [71]: %timeit df.values.tolist() 1 loop, best of 3: 993 ms per loop