python - una - marco de datos pandas seleccionar columnas en multiindex
seleccionar una fila de un dataframe pandas (3)
Tengo el siguiente pd.DataFrame:
Name 0 1 ...
Col A B A B ...
0 0.409511 -0.537108 -0.355529 0.212134 ...
1 -0.332276 -1.087013 0.083684 0.529002 ...
2 1.138159 -0.327212 0.570834 2.337718 ...
Tiene columnas MultiIndex con names=[''Name'', ''Col'']
y niveles jerárquicos. La etiqueta de Name
va de 0 a n, y para cada etiqueta, hay dos columnas A
y B
Me gustaría subseleccionar todas las columnas A
(o B
) de este DataFrame.
Existe un método get_level_values
que puede usar junto con la indexación booleana para obtener el resultado deseado.
In [13]:
df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([[1,2],[''A'',''B'']])
print df
1 2
A B A B
0 0.543980 0.628078 0.756941 0.698824
1 0.633005 0.089604 0.198510 0.783556
2 0.662391 0.541182 0.544060 0.059381
3 0.841242 0.634603 0.815334 0.848120
In [14]:
print df.iloc[:, df.columns.get_level_values(1)==''A'']
1 2
A A
0 0.543980 0.756941
1 0.633005 0.198510
2 0.662391 0.544060
3 0.841242 0.815334
Método 1:
df.xs(''A'', level=''Col'', axis=1)
Para más información, consulte http://pandas.pydata.org/pandas-docs/stable/advanced.html#cross-section
Método 2:
df.loc[:, (slice(None), ''A'')]
Advertencia: este método requiere que las etiquetas estén ordenadas. Para más información, consulte http://pandas.pydata.org/pandas-docs/stable/advanced.html#the-need-for-sortedness-with-multiindex
También puede intercambiar los índices de columna y luego seleccionar, por ejemplo ...
df = df.swaplevel(0,1,axis =1)
A = df[''A'']
B = df[''B'']