2016-07-21 222 views
4

是否有任何等效的pandas.DataFrame.reset_index對列進行操作,並且能夠處理重複列名的情況?熊貓DataFrame reset_index列?

很明顯,我可以簡單地給列分配新的值,我想知道是否有像df.reset_index這樣的方法來做到這一點。

採樣輸入

pd.DataFrame(np.random.rand(5, 3), columns = ['A', 'A', 'B']) 

    A A B 
0 0.5 0.3 0.9 
1 0.7 0.9 0.3 
2 0.9 0.4 0.8 
3 0.6 0.2 0.9 
4 0.7 0.4 0.6 

預期輸出

 0 1 2 
0 0.8 0.1 0.2 
1 0.4 0.2 0.4 
2 0.3 0.3 0.4 
3 0.4 0.1 0.8 
4 1.0 0.9 0.9 

其中0,1,2僅僅是熊貓的默認方式中沒有提供的名字來命名的列。

df.renamedf.reindex_axis,現有的方法時,我有重複的列名

回答

3

您可以使用set_axis()方法:

In [54]: df 
Out[54]: 
      A   A   B 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 

In [55]: df.set_axis(1, range(len(df.columns))) 

In [56]: df 
Out[56]: 
      0   1   2 
0 0.934900 0.817182 0.166270 
1 0.064543 0.139431 0.249576 
2 0.709349 0.731913 0.965048 
3 0.284955 0.479898 0.496652 
4 0.520749 0.464256 0.999993 
2

使用range與柱的長度由shape不起作用:

df.columns = range(df.shape[1]) 
print (df) 
      0   1   2 
0 0.228080 0.884450 0.753401 
1 0.176790 0.741979 0.525305 
2 0.680255 0.730258 0.449681 
3 0.169420 0.660825 0.986554 
4 0.302204 0.040413 0.902899 

通過Treset_index與雙變調另一種解決方案參數drop=True

df = df.T.reset_index(drop=True).T 
print (df) 
      0   1   2 
0 0.024846 0.688193 0.887926 
1 0.284681 0.895319 0.142876 
2 0.440834 0.299527 0.762815 
3 0.936967 0.928907 0.642960 
4 0.801077 0.085773 0.866651 
+0

寫在的問題,我想避免的列賦新值。 特別是,我想在字典理解的上下文中執行此操作,其中我通過連接時間序列,然後更改列的名稱來創建數據框。 – FLab

+0

好的,然後使用第二種解決方案。不幸的是,'reset_index'不適用於列,所以需要雙重轉置。 – jezrael