Заполнение «пустого» значения в мультииндексах pandas для доступа к индексу более низкого уровня - PullRequest
0 голосов
/ 06 ноября 2018

Я использую фрейм данных с двухуровневым индексом. Первый уровень предназначен для имен элементов, второй - для цветов элементов. В моем индексе второго уровня у меня всегда есть имя индекса под названием «total» для суммы всех цветов.

Я бы хотел запросить фрейм данных таким образом, чтобы python возвращал «итоговые» значения для всех ботинок. Я мог бы изменить порядок индекса, но я ищу более чистое решение. Как я мог это сделать?

что-то, что, как я думал, могло бы помочь, было бы чем-то, связывающим «пустой» термин для индекса. Может быть, что-то подобное уже существует?

например.

df.loc[*blank*,"total",:]

1 Ответ

0 голосов
/ 06 ноября 2018

Я думаю, вам нужно : с IndexSlice для выбора всех значений:

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux', 'bar', 'foo']),
          np.array(['one','two','one','two','total','two','total', 'two','total','four'])]
df = pd.DataFrame(np.random.randn(10), index=arrays)
print (df)
                  0
bar one   -0.152506
    two   -0.492401
baz one   -1.528111
    two   -3.284650
foo total -0.346641
    two    0.630630
qux total -0.232299
    two    0.361744
bar total -2.170350
foo four  -2.332996

idx = pd.IndexSlice
df1 = df.loc[idx[:,"total"],:]
print (df1)
                  0
foo total -0.346641
qux total -0.232299
bar total -2.170350

Или используйте DataFrame.xs:

df1 = df.xs('total', level=1)
print (df1)
            0
foo -0.099117
qux  0.381831
bar  1.638784
df1 = df.xs('total', level=1, drop_level=False)
print (df1)
                  0
foo total -0.570454
qux total  0.015090
bar total -1.084960
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...