2014-10-27 6 views
1

У меня есть dataframe с заголовками столбцов «div3, div4, DIV5 ... DIV30»Сортировка столбцов в панд dataframe

Моя проблема заключается в том, что панды будет сортировать столбцы следующим образом:

DIV10, DIV11, DIV12..., DIV3, DIV4, DIV5 

Есть ли способ устроить так, чтобы цифры с цифрой были первыми? Т.е .:

DIV3, DIV4, DIV5... DIV30 

ответ

3

Вы можете решить эту проблему sorting in "human order":

import re 
import pandas as pd 
def natural_keys(text): 
    ''' 
    alist.sort(key=natural_keys) sorts in human order 
    http://nedbatchelder.com/blog/200712/human_sorting.html 
    (See Toothy's implementation in the comments) 
    ''' 
    def atoi(text): 
     return int(text) if text.isdigit() else text 

    return [atoi(c) for c in re.split('(\d+)', text)] 

columns = ['DIV10', 'DIV11', 'DIV12', 'DIV3', 'DIV4', 'DIV5']  
df = pd.DataFrame([[1]*len(columns)], columns=columns) 
print(df) 
# DIV10 DIV11 DIV12 DIV3 DIV4 DIV5 
# 0  1  1  1  1  1  1 

df = df.reindex(columns=sorted(df.columns, key=natural_keys)) 
print(df) 

дает

DIV3 DIV4 DIV5 DIV10 DIV11 DIV12 
0  1  1  1  1  1  1 
Смежные вопросы