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