【发布时间】:2017-02-07 12:30:11
【问题描述】:
假设一个数据框有这样一个索引:
df = pd.DataFrame(np.array([[1,2,3,4],[4,5,6,1],['A','B','C','A'],['a','b','a','b']]).T,columns=['d1','d2','type','subtype'])
df.set_index(['type', 'subtype','d1']).unstack('d1')
df = pd.DataFrame(np.array([[1,2,3,4],[4,5,6,1],['A','B','C','A'],['a','b','a','b']]).T,columns=['d1','d2','type','subtype'])
df = df.set_index(['type', 'subtype','d1']).unstack('d1')
df.index
MultiIndex(levels=[['A', 'B', 'C'], ['a', 'b']],
labels=[[0, 0, 1, 2], [0, 1, 1, 0]],
names=['type', 'subtype'])
我确实将数据框的值用于某些分析(例如 PCA)。之后,我想绘制结果并根据索引命名点。我知道行名的信息是由多索引中的级别和标签提供的。如何生成一个列表,其中包含每个样本的名称(例如 ['Aa', 'Ab', 'Bb', 'Ca'])?
我真的必须这样做吗?:
l1 = df.index.get_level_values(0).values.tolist()
l2 = df.index.get_level_values(1).values.tolist()
[i1 + i2 for i1, i2 in zip(l1,l2)]
这产生了我:
['Aa', 'Ab', 'Bb', 'Ca']
或者有更优雅的解决方案吗?
【问题讨论】: