2013-04-18 294 views
23

我想將列添加到多索引列數據框的第二級。熊貓:將列添加到多索引列數據框

In [151]: df 
Out[151]: 
first  bar     baz   
second  one  two  one  two 
A  0.487880 -0.487661 -1.030176 0.100813 
B  0.267913 1.918923 0.132791 0.178503 
C  1.550526 -0.312235 -1.177689 -0.081596 

直接分配慣用的伎倆行不通:

In [152]: df['bar']['three'] = [0, 1, 2] 

In [153]: df 
Out[153]: 
first  bar     baz   
second  one  two  one  two 
A  0.487880 -0.487661 -1.030176 0.100813 
B  0.267913 1.918923 0.132791 0.178503 
C  1.550526 -0.312235 -1.177689 -0.081596 

我怎樣才能在第三行添加到「欄」下的?

回答

40

這其實很簡單(FWIW,我原本以爲你說的辦):

df['bar', 'three'] = [0, 1, 2] 
df = df.sort_index(axis=1) 
print(df) 

     bar      baz   
     one  two three  one  two 
A -0.212901 0.503615  0 -1.660945 0.446778 
B -0.803926 -0.417570  1 -0.336827 0.989343 
C 3.400885 -0.214245  2 0.895745 1.011671 
+0

感謝。我必須說,這對我來說完全不明顯,爲什麼只有在使用sort_index之後纔會顯示新列。 – ezbentley

+2

哦,對不起,這不是答案的一部分,只是我挑剔。當你調用'df ['bar','three'] = [0,1,2]'時,它實際上會顯示出來。默認情況下,熊貓將把它放在DataFrame的末尾(在[baz,two]之後)。我只是想看看其他'酒吧'。 – spencerlyon2

+0

我明白了。感謝您的解釋。 – ezbentley

1

如果我們要添加一個多層次柱:

來源DF:

In [221]: df 
Out[221]: 
first  bar     baz 
second  one  two  one  two 
A  -1.089798 2.053026 0.470218 1.440740 
B  0.488875 0.428836 1.413451 -0.683677 
C  -0.243064 -0.069446 -0.911166 0.478370 

選項1:將除法結果:bar/baz作爲新foo

In [222]: df = df.join(df[['bar']].div(df['baz']).rename(columns={'bar':'foo'})) 

In [223]: df 
Out[223]: 
first  bar     baz     foo 
second  one  two  one  two  one  two 
A  -1.089798 2.053026 0.470218 1.440740 -2.317647 1.424980 
B  0.488875 0.428836 1.413451 -0.683677 0.345873 -0.627250 
C  -0.243064 -0.069446 -0.911166 0.478370 0.266761 -0.145172 

選項2:將多級柱具有三個 「子欄目」:

In [235]: df = df.join(pd.DataFrame(np.random.rand(3,3), 
    ...:       columns=pd.MultiIndex.from_product([['new'], ['one','two','three']]), 
    ...:        index=df.index)) 

In [236]: df 
Out[236]: 
first  bar     baz     new 
second  one  two  one  two  one  two  three 
A  -1.089798 2.053026 0.470218 1.440740 0.274291 0.636257 0.091048 
B  0.488875 0.428836 1.413451 -0.683677 0.668157 0.456931 0.227568 
C  -0.243064 -0.069446 -0.911166 0.478370 0.333824 0.363060 0.949672 
相關問題