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