To sort by multiple columns ascending and descending in Pandas we can use syntax like:
df.sort_values(by=['name', 'salary'], ascending=[True, False])

Let's cover two examples to explain sorting on multiple columns in more detail.
Sort a DataFrame by two or more columns
To sort Pandas DataFrame by two and more columns we can use parameter by:
df.sort_values(by=['name', 'age'], ascending=True)
Example of sorting DataFrame by two columns:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
'age': [25, 30, 35, 25, 40],
'salary': [50000, 70000, 60000, 55000, 80000]
})
df.sort_values(by=['name', 'age'], ascending=True)
The code above sort the DataFrame by 'name' and 'age' columns in ascending order:
| name | age | salary | |
|---|---|---|---|
| 0 | Alice | 25 | 50000 |
| 3 | Alice | 25 | 55000 |
| 1 | Bob | 30 | 70000 |
| 4 | Bob | 40 | 80000 |
| 2 | Charlie | 35 | 60000 |
DataFrame before sorting is:
| name | age | salary | |
|---|---|---|---|
| 0 | Alice | 25 | 50000 |
| 1 | Bob | 30 | 70000 |
| 2 | Charlie | 35 | 60000 |
| 3 | Alice | 25 | 55000 |
| 4 | Bob | 40 | 80000 |
We can specify the sort order for each column using the ascending parameter as boolean or a list:
ascending=True- the columns will be sorted in ascending orderascending=False- sorted in descending order.
sort by multiple columns one ascending and descending
We can use Pandas method sort_values() to sort by multiple columns in different order: ascending and descending.
Parameter ascending can take a list of values: ascending=[True, False].
Full example of sort both ascending and descending in Pandas:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
'age': [25, 30, 35, 25, 40],
'salary': [50000, 70000, 60000, 55000, 80000]
})
df.sort_values(by=['name', 'salary'], ascending=[True, False])
The result of the sorted DataFrame is:
| name | age | salary | |
|---|---|---|---|
| 3 | Alice | 25 | 55000 |
| 0 | Alice | 25 | 50000 |
| 4 | Bob | 40 | 80000 |
| 1 | Bob | 30 | 70000 |
| 2 | Charlie | 35 | 60000 |