【发布时间】:2020-05-20 09:47:57
【问题描述】:
使用下面的代码,我尝试插入一个新的行标签(两个名称级别),但根据打印输出,MultiIndex.insert() 似乎不起作用。用户 xyzjayne 提到 here“MultiIndex 是不可变的”。那么为什么会有MultiIndex.insert 和/或如何在以下情况下正确使用MultiIndex.insert 以获得所需的结果?
不是选项:
在 MultiIndexing 之前将 ('D', '9') 添加到
labels元组列表。 这个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'])
【问题讨论】:
标签: python python-3.x pandas multi-index