2017-06-07 27 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]