熊猫:重命名多索引df中的列标签
Posted
技术标签:
【中文标题】熊猫:重命名多索引df中的列标签【英文标题】:pandas: renaming column labels in multiindex df 【发布时间】:2016-09-15 05:54:48 【问题描述】:我有一个看起来像这样的 df:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([['1|mm','2|lll'],['A|ljjh','B|ldjdj']])
1|mm 2|lll
A|ljjh B|ldjdj A|ljjh B|ldjdj
0 0.599202 0.093917 0.582809 0.683346
1 0.902717 0.343215 0.222960 0.238709
2 0.808473 0.290253 0.276607 0.775530
3 0.197891 0.505197 0.243890 0.011838
我想像这样拆分每个级别的列标签:
columnlabel.split("|")[0]
我不确定最好的方法是什么?我应该创建一个新列表并将其分配给 df.columns 还是可以就地完成?
预期输出
1 2
A B A B
0 0.599202 0.093917 0.582809 0.683346
1 0.902717 0.343215 0.222960 0.238709
2 0.808473 0.290253 0.276607 0.775530
3 0.197891 0.505197 0.243890 0.011838
【问题讨论】:
【参考方案1】:您可以使用get_level_values
和split
进行解析,创建tuples
的新列表和最后一个新的MultiIndex
from_tuples
:
new_names = list(zip(df.columns.get_level_values(0).str.split('|').str[0],
df.columns.get_level_values(1).str.split('|').str[0]))
print (new_names)
[('1', 'A'), ('1', 'B'), ('2', 'A'), ('2', 'B')]
df.columns = pd.MultiIndex.from_tuples(new_names)
print (df)
1 2
A B A B
0 0.400125 0.007743 0.423123 0.662878
1 0.787079 0.314668 0.798404 0.702267
2 0.451037 0.333846 0.030534 0.823515
3 0.135365 0.785421 0.777839 0.248622
【讨论】:
以上是关于熊猫:重命名多索引df中的列标签的主要内容,如果未能解决你的问题,请参考以下文章