1 回答
TA贡献1815条经验 获得超10个赞
您需要从索引中删除未使用的级别,并pandas
有一个方法:pandas.MultiIndex.remove_unused_levels
data.index = data.index.remove_unused_levels()
但是如果你只想创建一个唯一组的字典,你真的应该只使用一个groupby
:
dct = dict((id, gp) for id, gp in data.groupby(level=0))
还要避免命名变量,dict
因为您会覆盖dict
我上面使用的默认函数。
样本数据
df1 = pd.DataFrame({'id1': [1,1,1,2,2],
'id2': list('ABCAB'),
'val': [11,12,13,14,15]})
df1 = df1.set_index(['id1', 'id2'])
df1.index
#MultiIndex(levels=[[1, 2], ['A', 'B', 'C']],
# labels=[[0, 0, 0, 1, 1], [0, 1, 2, 0, 1]],
# names=['id1', 'id2'])
df2 = df1.drop(1)
df2.index
#MultiIndex(levels=[[1, 2], ['A', 'B', 'C']],
# labels=[[1, 1], [0, 1]],
# names=['id1', 'id2'])
df2.index = df2.index.remove_unused_levels()
df2.index
#MultiIndex(levels=[[2], ['A', 'B']],
# labels=[[0, 0], [0, 1]],
# names=['id1', 'id2'])
添加回答
举报