2017-10-17 62 views
2

我想用df.set_index()函數更改我的DataFrame索引列。雖然這提供了一個功能性解決方案,但它創建了一個我想擺脫的「額外」行。如何在set_index()後刪除多餘的行而不會丟失索引名?

df = pd.DataFrame({'A': ['a','b','c'], 'B': ['d','e','f'], 'C': [1,2,3]}) 

df看起來是這樣的:

A B C 
0 a d 1 
1 b e 2 
2 c f 3 

更改數據框指數:

df.set_index('C') 

結果:

A B 
C 
1 a e 
2 b f 
3 c g 

我怎樣才能使數據幀看起來像下面這樣?

C A B 
1 a e 
2 b f 
3 c g 

我看到了一個類似的問題here但使用reset_index()的解決方案並沒有提供所需的結果。我想保留第C列中的值,並只刪除多餘的行。

回答

5

如果你想有C指數

In [50]: r = df.set_index('C') 

In [51]: r 
Out[51]: 
    A B 
C 
1 a d 
2 b e 
3 c f 

In [52]: r.index.name 
Out[52]: 'C' 

In [53]: r.columns.name is None 
Out[53]: True 

In [54]: r = r.rename_axis(None,0).rename_axis('C',1) 

In [57]: r 
Out[57]: 
C A B 
1 a d 
2 b e 
3 c f 

In [55]: r.index.name is None 
Out[55]: True 

In [56]: r.columns.name 
Out[56]: 'C' 

注:但它看起來相當誤導......

+0

這也是一個很好的解決方案。 –

+2

@ScottBoston,謝謝!但我認爲應該避免做這樣的化妝品... – MaxU

+1

@MapleSyrup ummm .....顯示數據爲這....是有線... – Wen

3

[[]]試試這個:

df[['C','A','B']] 

例子:

df = pd.DataFrame({'A': ['a','b','c'], 'B': ['d','e','f'], 'C': [1,2,3]}) 
print(df) 

    A B C 
0 a d 1 
1 b e 2 
2 c f 3 

df = df[['C','A','B']] 
print(df) 

    C A B 
0 1 a d 
1 2 b e 
2 3 c f 
+1

更規範版本N列='DF [C [-1:] + C [: - 1 ]]'哪裏'c = df.columns.tolist()' –

1

如果你只想要DataFrame顯示(打印),只要你想什麼...

print (df[['C','A','B']].to_string(index=False)) 
C A B 
1 a d 
2 b e 
3 c f 
相關問題