How to sort dataframe rows by multiple columns [duplicate]

Use sort_values, which can accept a list of sorting targets. In this case it sounds like you want to sort by S/N, then Dis, then Rate:

df = df.sort_values(['S/N', 'Dis', 'Rate'])

#     S/N      Dis       Rate
# 0   332   4.6030  91.204062
# 3   332   9.1985  76.212943
# 6   332  14.4405  77.664282
# 9   332  20.2005  76.725955
# 12  332  25.4780  31.597510
# 15  332  30.6670  74.096975
# 1   445   5.4280  60.233917
# 4   445   9.7345  31.902842
# 7   445  14.6015  36.261851
# 10  445  19.8630  40.705467
# 13  445  24.9050   4.897008
# 16  445  30.0550  35.217889
# ...

You can also achieve this by several ways, another way from the already existing answer is,

df.sort_values(by = ['S/N', "Dis", 'Rate'], inplace = True)
df

Output:

    S/N Dis     Rate
0   332 4.6030  91.204062
3   332 9.1985  76.212943
6   332 14.4405 77.664282
9   332 20.2005 76.725955
12  332 25.4780 31.597510
15  332 30.6670 74.096975
1   445 5.4280  60.233917
4   445 9.7345  31.902842
7   445 14.6015 36.261851
10  445 19.8630 40.705467
13  445 24.9050 4.897008
16  445 30.0550 35.217889
2   999 4.6030  91.474156
5   999 9.1985  76.212943
8   999 14.4405 77.664282
11  999 20.2005 76.725955
14  999 25.4780 31.597510
17  999 30.6670 74.096975

Here, the Inplace argument used within the sort_values function directly make the changes in the source dataframe which will eliminate the need to create another dataframe to store the sorted output.