2014-12-05 126 views
5

我試圖找出重置索引時是否有重命名熊貓列的方法。我在文檔中看到,如果只有一列,那麼可以使用「name」參數設置重置索引的列名,但我很好奇是否有辦法爲多列執行此操作。如何使用熊貓重命名重置索引上的多列

例如:

df1 = pd.DataFrame({ 
'A' : ['a1', 'a1', 'a2', 'a3'], 
'B' : ['b1', 'b2', 'b3', 'b4'], 
'D1' : [1,0,0,0], 
'D2' : [0,1,1,0], 
'D3' : [0,0,1,1], 
}) 

df1.set_index(['B','A']).stack().reset_index() 

結果留給你:

Out[82]: 
    B A level_2 0 
0 b1 a1  D1 1 
1 b1 a1  D2 0 
2 b1 a1  D3 0 
3 b2 a1  D1 0 
4 b2 a1  D2 1 

你可以這樣做:

df1.set_index(['B','A']).stack().reset_index(name='my_col') 

爲了設置最後一列,但我的名字想知道是否有辦法使用參數來設置'level_2'列的名字。

是來到我的腦海裏的第一件事就是嘗試:

df1.set_index(['B','A']).stack().reset_index(name=['my_col2','my_col']) 

然而,沒有工作,所以找身邊的另一種方式。我意識到我總是可以重新命名下一行的列,但希望有一條更清晰的方法可以在一行中完成。

謝謝! 山姆

+0

我不認爲這是可能的,你看,'reset_index()'在你的代碼實際上是http://pandas.pydata.org/pandas-docs/stable /generated/pandas.Series.reset_index.html,所以你只有一列。 你可以做的是設置你的系列的索引列的名稱,然後它們將保留爲DataFrame的列的名稱 – 2014-12-05 20:41:10

回答

3

reset_index是不是足夠聰明,這樣做,但我們可以利用方法rename_axisrename來重置索引前給予名稱索引和列/系列;一旦名字都設置正確,reset_index會自動的結果,這些名稱轉換爲列名:

這裏rename_axis賦予名稱是有點相當於df.index.names = ...除了在功能性風格指數; rename給出的名字到Series對象:

df1.set_index(['B','A']).stack().rename_axis(['B','A','col2']).rename('col').reset_index() 

# B A col2 col 
#0 b1 a1 D1 1 
#1 b1 a1 D2 0 
#2 b1 a1 D3 0 
#3 b2 a1 D1 0 
#4 b2 a1 D2 1 
# ..