2016-05-18 93 views
1

我有一个DF它看起来像这样:大熊猫:在多指标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_valuessplit用于解析,创建tuples新的名单和最后一个新MultiIndexfrom_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