2014-02-09 14 views
0

有沒有辦法通過連接來自不同級別表的兩個標籤直接創建列名稱? 例如,假設我有這樣的數據幀:通過將不同級別的兩個標籤連接到熊貓來創建列名稱

df = pd.DataFrame({'n':[0 ,1 ,0 ,0 ,1 ,1 ,0 ,1],'l':[12 ,16 ,92, 77 ,32 ,47, 22, 14], 'cols':['col1','col1','col1','col1','col2','col2','col2','col2'], 'index':range(4)*2}) 
df_p = df.pivot(index='index', columns='cols') 

,我想l/n添加到col1/col2

col1_l col2_l col1_n col2_n 
    12  32  0  1 
    16  47  1  1 
    92  22  0  0 
    77  14  0  1 

我知道我能做到這樣:

names_l = df_p.l.columns + '_l' 
names_n = df_p.n.columns + '_n' 
df_p.columns = names_l.append(names_n) 

但也許有做到這一點,我更直接的方式最終因爲有列,我應該有儘可能多的名字米不知道。

回答

3

還有不同方式。您想要按照相反順序組合多列索引的級別名稱,並將它們與_結合起來,因此感覺您至少需要指定三件事情。你可以刪除依賴的名字,反正喜歡的東西

>>> df_p.columns = ['_'.join(c[::-1]) for c in df_p.columns] 
>>> df_p 
     col1_l col2_l col1_n col2_n 
index         
0   12  32  0  1 
1   16  47  1  1 
2   92  22  0  0 
3   77  14  0  1 

[4 rows x 4 columns] 

它的作品,因爲當你遍歷原始列你

>>> list(df_p.columns) 
[('l', 'col1'), ('l', 'col2'), ('n', 'col1'), ('n', 'col2')] 
+0

太好了!非常感謝! – HappyPy