У меня есть pandas dataframe с мультииндексом 2 уровня и четырьмя столбцами данных, и я хочу выбрать сначала несколько индексов обоих уровней, а затем определенные столбцы. Однако я не нахожу способ сделать это. Позвольте мне проиллюстрировать это на примере:
>>> import numpy as np
>>> import pandas as pd
>>> a = pd.MultiIndex.from_arrays(np.array([np.repeat([1, 2], 6), np.tile(np.repeat(["a", "b", "c"], 2), 2)] ) )
>>> df = pd.DataFrame(np.random.randn(12,4), index=a, columns=list('ABCD'))
>>> df
A B C D
1 a 0.688481 -2.380630 1.586150 0.008736
a 0.481300 1.276254 -0.159889 0.568995
b -0.250297 -0.161532 -1.099416 0.362548
b -0.588712 0.403857 -0.573104 1.420252
c -1.026832 -1.297500 -0.084957 0.072306
c -0.262771 0.865048 -0.278121 -1.406952
2 a -0.873142 -0.871211 -1.790412 1.073330
a -2.252715 1.772763 1.784698 1.716706
b 1.108562 -0.622361 0.036408 1.170411
b -0.157282 -0.660653 -1.230480 -0.295144
c -0.241862 -0.471965 0.363945 0.125543
c -0.396109 0.245829 0.544339 -0.957016
Так что я могу сделать это:
>>> df.loc["1","a"]
A B C D
1 a 0.688481 -2.380630 1.586150 0.008736
a 0.481300 1.276254 -0.159889 0.568995
А это:
>>> df.loc[:,["A","B"]]
A B
1 a 0.688481 -2.380630
a 0.481300 1.276254
b -0.250297 -0.161532
b -0.588712 0.403857
c -1.026832 -1.297500
c -0.262771 0.865048
2 a -0.873142 -0.871211
a -2.252715 1.772763
b 1.108562 -0.622361
b -0.157282 -0.660653
c -0.241862 -0.471965
c -0.396109 0.245829
И даже это:
>>> df.loc["1","a"]["A"]
1 a 0.688481
a 0.481300
Name: A, dtype: float64
Но когда я делаю одно из них:
>>> df.loc["1","a",["A","B"]]
>>> df.loc["1","a"]["A","B"]
Я получил ошибку. То, что я хочу получить, это:
A B
1 a 0.688481 -2.380630
a 0.481300 1.276254
Я новичок в пандах, и я уверен, что это довольно простой вопрос, но я не могу найти ответ.
Спасибо!