2016-05-18 4 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

あなたは、解析のためにsplitget_level_valuesを使用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 
関連する問題