one columns column pandas multi-index

columns - Pandas: agrega una columna a un marco de datos de columna de múltiples índices



pandas rename one column (2)

Me gustaría agregar una columna al segundo nivel de un marco de datos de columna de índice múltiple.

In [151]: df Out[151]: first bar baz second one two one two A 0.487880 -0.487661 -1.030176 0.100813 B 0.267913 1.918923 0.132791 0.178503 C 1.550526 -0.312235 -1.177689 -0.081596

El truco habitual de asignación directa no funciona:

In [152]: df[''bar''][''three''] = [0, 1, 2] In [153]: df Out[153]: first bar baz second one two one two A 0.487880 -0.487661 -1.030176 0.100813 B 0.267913 1.918923 0.132791 0.178503 C 1.550526 -0.312235 -1.177689 -0.081596

¿Cómo puedo agregar la tercera fila a debajo de "barra"?


En realidad es bastante simple (FWIW, originalmente pensé hacerlo a tu manera):

df[''bar'', ''three''] = [0, 1, 2] df = df.sort_index(axis=1) print(df) bar baz one two three one two A -0.212901 0.503615 0 -1.660945 0.446778 B -0.803926 -0.417570 1 -0.336827 0.989343 C 3.400885 -0.214245 2 0.895745 1.011671


Si queremos añadir una columna multinivel:

Fuente DF:

In [221]: df Out[221]: first bar baz second one two one two A -1.089798 2.053026 0.470218 1.440740 B 0.488875 0.428836 1.413451 -0.683677 C -0.243064 -0.069446 -0.911166 0.478370

Opción 1 : agregar el resultado de la división: bar / baz como una nueva columna foo

In [222]: df = df.join(df[[''bar'']].div(df[''baz'']).rename(columns={''bar'':''foo''})) In [223]: df Out[223]: first bar baz foo second one two one two one two A -1.089798 2.053026 0.470218 1.440740 -2.317647 1.424980 B 0.488875 0.428836 1.413451 -0.683677 0.345873 -0.627250 C -0.243064 -0.069446 -0.911166 0.478370 0.266761 -0.145172

Opción 2 : agregar una columna de varios niveles con tres "sub-columnas":

In [235]: df = df.join(pd.DataFrame(np.random.rand(3,3), ...: columns=pd.MultiIndex.from_product([[''new''], [''one'',''two'',''three'']]), ...: index=df.index)) In [236]: df Out[236]: first bar baz new second one two one two one two three A -1.089798 2.053026 0.470218 1.440740 0.274291 0.636257 0.091048 B 0.488875 0.428836 1.413451 -0.683677 0.668157 0.456931 0.227568 C -0.243064 -0.069446 -0.911166 0.478370 0.333824 0.363060 0.949672