首页 > 解决方案 > How to sort the columns of a data frame by index value in alphabetical order

问题描述

Now I am analyzing a lot of data extracted in logs.
Could you let me know how to sort a column of dataframe by index in alphabetical order?
I want to sort column values by "Temp" in alphabetical order.

I have tried to use "sort_values(by="", axis=1)"

   ex) df = df.sort_values(by=['env','In','Temp'], axis=1)

I think I might not know how to sort values in multi-index.
I don't get expected result until now. :

from pandas import Series, DataFrame

raw_data = {'Function': ['env', 'env', 'env', 'func1', 'func1', 'func1'],
            'Type': ['In', 'In', 'In', 'In','In', 'out'],
            'Name': ['Volt', 'Temp', 'BD#', 'Name1','Name2', 'Name3'],
            'Val1': ['Max', 'High', '1', '3', '5', '6'],
            'Val2': ['Typ', 'Mid', '2', '4', '7', '6'],
            'Val3': ['Min', 'Low', '3', '3', '6', '3'],
            'Val4': ['Max', 'High', '4', '3', '9', '4'],
            'Val5': ['Max', 'Low', '5', '3', '4', '5'] }
df = DataFrame(raw_data)
df= df.set_index(["Function", "Type","Name"])
print (df)

below is printed dataframe

                            Val1    Val2    Val3    Val4    Val5
 Function   Type    Name                    
 env        In      Volt    Max     Typ     Min     Max     Max
                    Temp    High    Mid     Low     High    Low
                    BD#     1       2       3       4       5
 func1      In      Name1   3       4       3       3       3
                    Name2   5       7       6       9       4
            out     Name3   6       6       3       4       5

I'd like to sort multi-index dataframe by "Temp".

below is expected df I want.

                            Val1    Val4    Val3    Val5    Val2
 Function   Type    Name                    
 env        In      Volt    Max     Max     Min     Max     Typ
                    Temp    High    High    Low     Low     Mid
                    BD#     1       4       3       5       2
 func1      In      Name1   3       3       3       3       4
                    Name2   5       9       6       4       7
            out     Name3   6       4       3       5       6

标签: pythonpandasdataframeedit

解决方案


Use double transpose with sort_values:

df = df.T.sort_values(('env','In','Temp')).T

print(df)
                     Val1  Val4 Val3 Val5 Val2
Function Type Name                            
env      In   Volt    Max   Max  Min  Max  Typ
              Temp   High  High  Low  Low  Mid
              BD#       1     4    3    5    2
func1    In   Name1     3     3    3    3    4
              Name2     5     9    6    4    7
         out  Name3     6     4    3    5    6

推荐阅读