Python Pandas: удалить столбец из индекса многоуровневого столбца?
у меня есть многоуровневая таблица столбцов, как это:
a
---+---+---
b | c | f
--+---+---+---
0 | 1 | 2 | 7
1 | 3 | 4 | 9
как я могу удалить столбец " c " по имени? чтобы выглядеть так:
a
---+---
b | f
--+---+---
0 | 1 | 7
1 | 3 | 9
Я попытался это:
del df['c']
но я получаю следующую ошибку, которая имеет смысл:
KeyError: 'длина ключа (1) была больше, чем глубина multiindex lexsort (0)'
2 ответов
с несколькими индексами мы должны указать столбец с помощью кортежа, чтобы удалить определенный столбец, или указать уровень, чтобы удалить все столбцы с этим ключом на этом уровне индекса.
вместо того, чтобы говорить Drop column 'c' говорят падение ('a','c') как показано ниже:
df.drop(('a', 'c'), axis = 1, inplace = True)
или укажите уровень, как показано ниже
df.drop('c', axis = 1, level = 1)
давайте сделаем простой df, чтобы продемонстрировать на:
>>> cols = pd.MultiIndex.from_tuples([("a", "b"), ("a", "c"),
... ("a", "f"), ('x', 'c'),('x', 'f')])
>>> df = pd.DataFrame([[1,3, 7, 21, 8], [2, 4, 9, 21, 8]], columns=cols)
>>> df
a x
b c f c f
0 1 3 7 21 8
1 2 4 9 21 8
теперь вот как отбросить 'c' из 'a'
>>> df.drop(('a', 'c'), axis = 1)
a x
b f c f
0 1 7 21 8
1 2 9 21 8
с трехуровневым индексом затем включите этот ключ в кортеж, чтобы упасть с нижнего уровня, например ('a','c','k')
С одним значением в качестве индекса, как и вы, он ищет индекс верхнего уровня для соответствия по умолчанию и отбрасывает совпадение на этот индекс или выдает ошибку, если ключ не находится в индексе, как вы нашли.
поэтому в моем примере было бы хорошо сказать ему, чтобы он отбросил только "x"
>>> df.drop('x', axis = 1)
a
b c f
0 1 3 7
1 2 4 9
снять все столбцы со вторым индексом 'c', затем укажите уровень
>>> df.drop('c', axis = 1, level = 1)
a x
b f f
0 1 7 8
1 2 9 8