Advertisement
Sorting data might sound like the easiest thing you’ll do with pandas, but it can trip you up if you don’t know all the ways it works. Whether you’re trying to tidy up rows alphabetically, organize numbers in descending order, or arrange based on multiple conditions, pandas gives you everything you need right out of the box. The key is knowing which tool to reach for and when.
Let’s walk through every way pandas lets you sort a DataFrame. Some of them are common, others are less used but worth knowing when the usual tricks don’t cut it.
This method is the one you’ll use most often, and it can adapt to a lot of sorting situations. At its core, you’re telling pandas which column or columns you want to sort by.
python
CopyEdit
df.sort_values(by='age')
That sorts the rows by the age column in ascending order. To flip it:
python
CopyEdit
df.sort_values(by='age', ascending=False)
Sorting by multiple columns is just as direct. The second column only kicks in when the first has ties.
python
CopyEdit
df.sort_values(by=['age', 'salary'], ascending=[True, False])
This sorts by age first and then by salary in reverse, all in one line.
And if you just want a quick view of a sorted Series without changing the full DataFrame:
python
CopyEdit
df['age'].sort_values()
This sorts the values in that column, keeps the original index, and doesn’t rearrange anything else. Great for quick inspections or comparisons.
Sorting can be done directly to the original DataFrame, too, without making a new one:
python
CopyEdit
df.sort_values(by='age', inplace=True)
That changes the current DataFrame and doesn't create a copy. It's a small setting, but useful when you're dealing with large data and don't want to keep extra versions around.
You can also handle missing values during sorting. By default, pandas pushes NaN entries to the bottom:
python
CopyEdit
df.sort_values(by='age')
But if you'd rather have them appear at the top:
python
CopyEdit
df.sort_values(by='age', na_position='first')
It’s an easy fix when you're trying to catch blanks or sort incomplete records.
Your DataFrame’s index can sometimes be more meaningful than the content of the columns. If it's based on time, categories, or labels, sorting the index may give you a better structure.
python
CopyEdit
df.sort_index()
That’s a basic ascending sort. To reverse it:
python
CopyEdit
df.sort_index(ascending=False)
Want to sort the columns instead of rows? That’s handled by changing the axis:
python
CopyEdit
df.sort_index(axis=1)
This orders your columns by name or label, and works whether they’re strings or numbers.
When working with a MultiIndex (either on rows or columns), you can sort by specific levels.
python
CopyEdit
df.sort_index(level=0)
Or, if your levels have names:
python
CopyEdit
df.sort_index(level='department')
And yes, you can do this across the column axis too:
python
CopyEdit
df.sort_index(axis=1, level=1)
It's especially useful when your data is grouped or structured in a nested form.
Not all sorts follow default rules. You might want to sort strings by length, or numbers based on some transformation. That’s where the key parameter in sort_values() becomes helpful.
python
CopyEdit
df.sort_values(by='name', key=lambda x: x.str.len())
That sorts names based on their length. You’re not changing the data, just the way pandas evaluates it.
Math operations work here, too:
python
CopyEdit
df.sort_values(by='score', key=lambda x: -abs(x))
That will sort based on the absolute values, but in reverse order. You can apply just about any logic, as long as the output lines up in size.
And if you want a fully manual approach, use argsort() to get sorting positions, then apply those positions yourself:
python
CopyEdit
sort_order = df['score'].argsort()
df.iloc[sort_order]
It gives you full control, especially when building custom or conditional sorting sequences that pandas can’t guess on its own.
When none of the built-in methods give you what you want, pandas still has tricks that help you adjust the view.
If you just want to reverse the order of the DataFrame without sorting based on values:
python
CopyEdit
df[::-1]
That flips rows from bottom to top. It’s fast and doesn’t use any sorting method. For flipping columns:
python
CopyEdit
df.loc[:, ::-1]
This reverses the column order, which is sometimes useful for checking the end of wide datasets without scrolling.
If your data includes categories or custom strings and you need them sorted in a specific order, define a mapping first:
python
CopyEdit
order = {'Low': 0, 'Medium': 1, 'High': 2}
df['priority_rank'] = df['priority'].map(order)
df.sort_values(by='priority_rank')
This lets you sort by logic that’s meaningful to you, not just alphabetical or numerical defaults.
For grouped data, you can sort inside each group as well. If you’ve grouped by region, and you want each region’s entries sorted by sales:
python
CopyEdit
df.groupby('region').apply(lambda x: x.sort_values('sales'))
This keeps the group structure but arranges each segment on its own terms. It’s practical for keeping reports readable when summaries are long.
And if you're paying close attention to sorting stability—meaning the order of equal elements—pandas lets you pick the sorting algorithm too:
python
CopyEdit
df.sort_values(by='age', kind='mergesort')
This one keeps the order of equal items the same as before the sort. It’s a subtle feature, but helpful when you’re sorting multiple times and want consistency.
Most sorting in pandas focuses on sorting rows, but you can also sort columns based on the values in a specific row. This comes in handy when you're analyzing patterns across columns—for example, sorting subjects for each student by their scores.
Here’s how you do it:
python
CopyEdit
df.loc[:, df.loc['student_1'].sort_values(ascending=False).index]
In this case, student_1 is a row (maybe the index label for one student), and you're sorting all the columns based on the values in that row. The result is a reordered DataFrame where the columns are arranged based on how student_1 performed, from highest to lowest.
This technique works well in transposed or wide-format datasets where each row is an entity and each column represents a variable.
Sorting in pandas isn't just about putting things in order—it’s about organizing data in ways that make your results clearer and easier to understand. Whether you’re reordering based on a single column, working with missing values, applying custom rules, or sorting within groups, pandas handles it all with a few precise commands. Knowing how to use each method means you can skip unnecessary reshuffling and focus on what your data actually tells you.
Advertisement
Understand deepfakes, their impact, the creation process, and simple tips to identify and avoid falling for fake media.
Learn how __init__ in Python works to initialize objects during class creation. This guide explains how the Python class constructor sets instance variables, handles defaults, and simplifies object setup
Explore how the New York Times vs OpenAI lawsuit could reshape media rights, copyright laws, and AI-generated content.
How to replace values in a list in Python with 10 easy methods. From simple index assignment to advanced list comprehension, explore the most effective ways to modify your Python lists
Highlighting top generative AI tools and real-world examples that show how they’re transforming industries.
Learn how to connect Kafka to MongoDB and build a simple, reliable data pipeline that moves real-time messages into a NoSQL database efficient-ly
Box adds Google Vertex AI to automate and enhance document processing with advanced machine learning capabilities.
Amazon explores AI-generated imagery to create targeted, efficient ads and improve marketing results for brands.
Struggling with Copilot's cost or limits? Explore smarter alternative AI tools with your desired features and workflow.
Want to organize your pandas DataFrame without confusion? This guide shows clear, practical ways to sort by values, index, custom logic, or within groups
Think generative AI risks are under control? Learn why security issues tied to AI models are growing fast—and why current defenses might not be enough
Need to save your pandas DataFrame as a CSV file but not sure which method fits best? Here are all the practical ways to do it—simple, flexible, and code-ready