2017-06-07 28 views
1

我有一個熊貓框架。當我打印列(如下所示)時,結果顯示我的列出現故障。有沒有辦法只排序前30列,以便他們(30,60,90 ... 900)?熊貓 - 度假村專欄位置

[in] df.columns 

[out] Index(['120', '150', '180', '210', '240', '270', '30', '300', '330', '360', 
    '390', '420', '450', '480', '510', '540', '570', '60', '600', '630', 
    '660', '690', '720', '750', '780', '810', '840', '870', '90', '900', 
    'Item', 'Price', 'Size', 'Time', 'Type', 'Unnamed: 0'], 
    dtype='object') 

固定框架將如下所示:

[out] Index(['30','60','90,'120', '150', '180', '210', '240', '270','300', '330', '360', 
    '390', '420', '450', '480', '510', '540', '570','600', '630', 
    '660', '690', '720', '750', '780', '810', '840', '870','900', 
    'Item', 'Price', 'Size', 'Time', 'Type', 'Unnamed: 0'], 
    dtype='object') 

回答

1

如果您知道列將在30倍數被命名爲30至900,可以生成一個明確的像這樣的:

c = [str(i) for i in range(30, 901, 30)] 

然後將其添加到其他列:

c = c + ['Item', 'Price', 'Size', 'Time', 'Type', 'Unnamed: 0'] 

那麼你應該可以訪問它df[c]

0

您需要選擇第一列名,轉換爲int和排序。然後轉換回str如果必要的話,用reindex_axis

np.sort(df.columns[:30].astype(int)).astype(str).tolist() + 
      df.columns[30:].tolist() 

樣品:

df = pd.DataFrame(np.arange(36).reshape(1,-1), 
    columns=['120', '150', '180', '210', '240', '270', '30', '300', 
    '330', '360','390', '420', '450', '480', '510', '540', '570', '60', '600', '630', 
    '660', '690', '720', '750', '780', '810', '840', '870', '90', '900', 
    'Item', 'Price', 'Size', 'Time', 'Type', 'Unnamed: 0']) 


print (df) 
    120 150 180 210 240 270 30 300 330 360  ...  840 870 90 \ 
0 0 1 2 3 4 5 6 7 8 9  ...  26 27 28 

    900 Item Price Size Time Type Unnamed: 0 
0 29 30  31 32 33 34   35 

[1 rows x 36 columns] 


df = df.reindex_axis(np.sort(df.columns[:30].astype(int)).astype(str).tolist() + 
        df.columns[30:].tolist(), axis=1) 
print (df) 
    30 60 90 120 150 180 210 240 270 300  ...  810 840 870 \ 
0 6 17 28 0 1 2 3 4 5 7  ...  25 26 27 

    900 Item Price Size Time Type Unnamed: 0 
0 29 30  31 32 33 34   35 

[1 rows x 36 columns]