Sort DataFrame index that has a string and number

前端 未结 2 2056
暗喜
暗喜 2021-02-15 16:16

My df DataFrame index looks like this:

Com_Lag_01
Com_Lag_02
Com_Lag_03
Com_Lag_04
Com_Lag_05
Com_Lag_06
Com_Lag_07
Com_Lag_08
Com_Lag_09
Com_Lag_10         


        
2条回答
  •  没有蜡笔的小新
    2021-02-15 16:57

    One could try something like this, by performing a sort on a numbered version of the index

    import pandas as pd
    # Create a DataFrame example
    df = pd.DataFrame(\
        {'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
        'Age': [27 ,25 ,22 ,34 ,31],\
        },\
        index = ['Com_Lag_1' ,'Com_Lag_12' ,'Com_Lag_3' ,'Com_Lag_24' ,'Com_Lag_5'])
    
    # Add of a column containing a numbered version of the index
    df['indexNumber'] = [int(i.split('_')[-1]) for i in df.index]
    # Perform sort of the rows
    df.sort(['indexNumber'], ascending = [True], inplace = True)
    # Deletion of the added column
    df.drop('indexNumber', 1, inplace = True)
    


    Edit 2017 - V1:

    To avoid SettingWithCopyWarning:

    df = df.assign(indexNumber=[int(i.split('_')[-1]) for i in df.index])
    

    Edit 2017 - V2 for Pandas Version 0.21.0

    import pandas as pd
    print(pd.__version__)
    # Create a DataFrame example
    df = pd.DataFrame(\
        {'Year': [1991 ,2004 ,2001 ,2009 ,1997],\
        'Age': [27 ,25 ,22 ,34 ,31],\
        },\
        index = ['Com_Lag_1' ,'Com_Lag_12' ,'Com_Lag_3' ,'Com_Lag_24' ,'Com_Lag_5'])
    
    df.reindex(index=df.index.to_series().str.rsplit('_').str[-1].astype(int).sort_values().index)
    

提交回复
热议问题