Мультииндексирование в Pandas приводит к исключению - PullRequest
0 голосов
/ 13 июня 2018

Я просматриваю примеры документации (https://pandas.pydata.org/pandas-docs/stable/advanced.html), и когда я запускаю следующий код, я получаю исключение, которое не понимаю и не знаю, как с ним обращаться:

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
            np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]

df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
df.xs(('one', 'bar'), level=('second', 'first'), axis=1)

AttributeError: 'RangeIndex' object has no attribute 'get_loc_level'

Более того:

df.MultiIndex.get_loc_level(key = 'First', level = 0)
AttributeError: 'DataFrame' object has no attribute 'MultiIndex'

df.loc[xs[:, ['one']], :]
NameError: name 'xs' is not defined

Ваш совет будет оценен.

1 Ответ

0 голосов
/ 13 июня 2018

Используйте axis=0 для выбора MultiIndex в индексе с уровнями по позициям, поскольку не определены имена индексов:

a = df.xs(('one', 'bar'), level=[1,0], axis=0)
print (a)
                0         1         2        3
bar one  0.010867 -1.033593 -0.275599 -0.59924

Если определить имена индексов:

df.index.names = ['first','second']
a = df.xs(('one', 'bar'), level=('second', 'first'), axis=0)
print (a)
                     0         1         2         3
first second                                        
bar   one     0.525222 -0.486259  0.477893  0.623223
...