panda从Multiindex获取行名(示例名)

2024-04-18 19:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

假设一个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')

enter image description here

^{pr2}$

我确实使用数据帧的值进行一些分析(例如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']

还是有更优雅的解决方案?在


Tags: 名称l1dfgetindexabtypelevel
1条回答
网友
1楼 · 发布于 2024-04-18 19:32:21

您可以使用map

df.index = df.index.map(''.join)
print (df)
      d2                  
d1     1     2     3     4
Aa     4  None  None  None
Ab  None  None  None     1
Bb  None     5  None  None
Ca  None  None     6  None

或列表理解:

^{pr2}$

^{}的解决方案:

df.index = df.index.to_series().str.join('')
print (df)
      d2                  
d1     1     2     3     4
Aa     4  None  None  None
Ab  None  None  None     1
Bb  None     5  None  None
Ca  None  None     6  None

相关问题 更多 >