С помощью приведенного ниже кода я попытался вставить новую метку строки (два уровня имени), но оказалось, что MultiIndex.insert()
не работает в соответствии с выводом на печать. Пользователь xyzjayne упоминает здесь «MultiIndex является неизменным» . Тогда почему есть MultiIndex.insert
и / или как правильно использовать MultiIndex.insert
в приведенном ниже случае, чтобы получить желаемый результат?
НЕ опция:
добавьте ('D', '9') в список кортежей labels
перед MultiIndexing. Этот labels
является общим, имеет порядок списков по умолчанию и используется несколько раз в других местах в различных настройках. И, таким образом, до создания DataFrame.
Версии: pandas 0.25.1 py37ha925a31_0
Желаемый результат:
row_labels MultiIndex([('A', '1'),
('A', '2'),
('B', '3'),
('B', '4'),
('C', '5'),
('C', '6'),
('D', '9'), # inserted row label ('D', '9')
('D', '7'),
('D', '8')],
names=['group', 'subgroup'])
Мой код:
import pandas as pd
labels = {'A' : ['1', '2'],
'B' : ['3', '4'],
'C' : ['5', '6'],
'D' : ['7', '8']}
tpl = []
for g, sg in labels.items():
for s in sg:
tpl.append((g, s))
row_labels = pd.MultiIndex.from_tuples(tpl, names=['group', 'subgroup'])
print ('row_labels', row_labels)
i = row_labels.get_locs(('D',))
print ('\nD is found at row(s): ', i)
# add row at position 6
row_labels.insert(6, (('D', '9')))
# check for added label
print ('\nrow_labels', row_labels)
Мой токовый выход:
row_labels MultiIndex([('A', '1'),
('A', '2'),
('B', '3'),
('B', '4'),
('C', '5'),
('C', '6'),
('D', '7'),
('D', '8')],
names=['group', 'subgroup'])
D is found at row(s): [6 7]
row_labels MultiIndex([('A', '1'),
('A', '2'),
('B', '3'),
('B', '4'),
('C', '5'),
('C', '6'),
('D', '7'),
('D', '8')],
names=['group', 'subgroup'])