предположит dataframe, который имеет индекс, как этот:Панды получить имена строк (имена образцов) из мультииндексных
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'])
Я использую значение dataframe для некоторого анализа (например, 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']
Или есть более элегантное решение?