Bird
Raised Fist0
Pandasdata~10 mins

Sorting by values in Pandas - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Sorting by values
Start with DataFrame
↓
Choose column(s) to sort
↓
Call sort_values()
↓
Sort rows by chosen column(s)
↓
Return sorted DataFrame
↓
End
We start with a DataFrame, pick columns to sort by, call sort_values(), and get a new DataFrame sorted by those columns.
Execution Sample
Pandas
import pandas as pd

df = pd.DataFrame({'Name': ['Anna', 'Bob', 'Cara'], 'Age': [25, 30, 22]})
sorted_df = df.sort_values(by='Age')
print(sorted_df)
This code sorts the DataFrame rows by the 'Age' column in ascending order.
Execution Table
StepActionDataFrame state (Name, Age)Result
1Create DataFrame[('Anna', 25), ('Bob', 30), ('Cara', 22)]Original order
2Call sort_values(by='Age')Same as step 1Sorting triggered
3Sort rows by Age ascending[('Cara', 22), ('Anna', 25), ('Bob', 30)]Rows reordered
4Return sorted DataFrame[('Cara', 22), ('Anna', 25), ('Bob', 30)]Sorted DataFrame ready
💡 Sorting complete, DataFrame rows ordered by Age ascending
Variable Tracker
VariableStartAfter sort_valuesFinal
df[('Anna', 25), ('Bob', 30), ('Cara', 22)][('Anna', 25), ('Bob', 30), ('Cara', 22)][('Anna', 25), ('Bob', 30), ('Cara', 22)]
sorted_dfN/A[('Cara', 22), ('Anna', 25), ('Bob', 30)][('Cara', 22), ('Anna', 25), ('Bob', 30)]
Key Moments - 2 Insights
Why does the original DataFrame 'df' not change after sorting?
Because sort_values() returns a new sorted DataFrame and does not modify 'df' in place unless you use inplace=True. See execution_table step 3 and variable_tracker where 'df' stays the same.
What happens if we sort by a column with duplicate values?
Rows with the same value in the sorted column keep their original order (stable sort). This is shown by the sorting step in execution_table where order is preserved for ties.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, which row comes first after sorting by 'Age'?
A('Bob', 30)
B('Cara', 22)
C('Anna', 25)
D('Bob', 22)
💡 Hint
Check the 'DataFrame state' column at step 3 in execution_table
According to variable_tracker, what is the value of 'df' after sorting?
A[('Anna', 25), ('Bob', 30), ('Cara', 22)]
BN/A
C[('Cara', 22), ('Anna', 25), ('Bob', 30)]
DEmpty DataFrame
💡 Hint
Look at the 'df' row in variable_tracker after sort_values
If we want to sort the DataFrame by 'Age' descending, what parameter should we add?
Aascending=True
Bby='Age_desc'
Cascending=False
Dreverse=True
💡 Hint
Recall sort_values() has an 'ascending' parameter controlling sort order
Concept Snapshot
pandas.DataFrame.sort_values(by=column_name)
- Sorts rows by column values
- Returns a new sorted DataFrame
- Default is ascending order
- Use inplace=True to modify original
- Can sort by multiple columns
Full Transcript
We start with a DataFrame containing names and ages. We want to sort it by the 'Age' column. Using df.sort_values(by='Age'), pandas sorts the rows in ascending order by age. The original DataFrame 'df' remains unchanged because sort_values returns a new DataFrame. The new sorted DataFrame has rows ordered from youngest to oldest. This process is stepwise: create DataFrame, call sort_values, sort rows, return sorted DataFrame. Remember, to change the original DataFrame, use inplace=True. Sorting is stable, so rows with equal values keep their order.

Practice

(1/5)
1. What does the sort_values() function do in pandas?
easy
A. It filters rows based on a condition.
B. It groups data by a column.
C. It sorts the DataFrame by one or more columns.
D. It merges two DataFrames.

Solution

  1. Step 1: Understand the function purpose

    The sort_values() function is designed to reorder rows in a DataFrame based on the values in one or more columns.
  2. Step 2: Compare with other functions

    Filtering, grouping, and merging are done by different pandas functions like filter(), groupby(), and merge().
  3. Final Answer:

    It sorts the DataFrame by one or more columns. -> Option C
  4. Quick Check:

    sort_values() = reorder rows by column values [OK]
Hint: Remember: sort_values orders rows by column data [OK]
Common Mistakes:
  • Confusing sorting with filtering
  • Thinking it groups data
  • Mixing it up with merging DataFrames
2. Which of the following is the correct syntax to sort a DataFrame df by the column 'age' in descending order?
easy
A. df.sort_values(by='age', ascending=False)
B. df.sort_values('age', descending=True)
C. df.sort('age', ascending=False)
D. df.sort_values('age', ascending=True)

Solution

  1. Step 1: Identify correct parameter names

    The correct parameter to specify the column is by='age', and to sort descending, use ascending=False.
  2. Step 2: Check syntax correctness

    df.sort_values(by='age', ascending=False) uses the correct function name sort_values and correct parameters. df.sort_values('age', ascending=True) sorts ascending, C uses a wrong function sort, and B uses a wrong parameter descending=True.
  3. Final Answer:

    df.sort_values(by='age', ascending=False) -> Option A
  4. Quick Check:

    sort_values(by=col, ascending=False) = descending sort [OK]
Hint: Use ascending=False for descending order in sort_values [OK]
Common Mistakes:
  • Using ascending=True for descending sort
  • Using wrong parameter names like descending=True
  • Using non-existent sort() method
3. Given the DataFrame:
import pandas as pd
df = pd.DataFrame({'name': ['Anna', 'Bob', 'Cara'], 'score': [88, 92, 85]})
print(df.sort_values('score'))

What will be the output?
medium
A. Original DataFrame without sorting
B. Rows sorted by 'score' descending: Bob, Anna, Cara
C. Error because 'score' is not a column
D. Rows sorted by 'score' ascending: Cara, Anna, Bob

Solution

  1. Step 1: Understand the DataFrame content

    The DataFrame has names and scores: Anna(88), Bob(92), Cara(85).
  2. Step 2: Apply sort_values on 'score'

    Sorting by 'score' ascending orders rows as Cara(85), Anna(88), Bob(92).
  3. Final Answer:

    Rows sorted by 'score' ascending: Cara, Anna, Bob -> Option D
  4. Quick Check:

    sort_values('score') sorts ascending by default [OK]
Hint: Default sort_values sorts ascending unless told otherwise [OK]
Common Mistakes:
  • Assuming descending order by default
  • Thinking original order is preserved
  • Believing 'score' column does not exist
4. What is wrong with this code snippet?
df.sort_values('age', ascending='False')
medium
A. The column name 'age' must be passed as a list.
B. The ascending parameter should be a boolean, not a string.
C. sort_values does not accept the ascending parameter.
D. The function should be sort_by_values, not sort_values.

Solution

  1. Step 1: Check parameter types

    The ascending parameter expects a boolean value True or False, not a string.
  2. Step 2: Validate other parts

    The column name can be a string or list, sort_values is the correct function, and it accepts ascending.
  3. Final Answer:

    The ascending parameter should be a boolean, not a string. -> Option B
  4. Quick Check:

    ascending must be True/False boolean, not 'False' string [OK]
Hint: Use True/False without quotes for ascending parameter [OK]
Common Mistakes:
  • Passing 'False' as a string instead of boolean
  • Thinking column name must be a list
  • Using wrong function name
5. You have a DataFrame df with columns 'city' and 'temperature'. You want to sort it first by 'city' alphabetically ascending, then by 'temperature' descending within each city. Which code correctly does this?
hard
A. df.sort_values(by=['city', 'temperature'], ascending=[True, False])
B. df.sort_values(by=['temperature', 'city'], ascending=[False, True])
C. df.sort_values(by=['city', 'temperature'], ascending=False)
D. df.sort_values(['city', 'temperature'], ascending=[False, True])

Solution

  1. Step 1: Understand multi-column sorting

    To sort by multiple columns, pass a list to by and a list of booleans to ascending matching each column.
  2. Step 2: Match sorting order requirements

    We want 'city' ascending (True) and 'temperature' descending (False), so ascending=[True, False].
  3. Step 3: Check options

    df.sort_values(by=['city', 'temperature'], ascending=[True, False]) matches the correct order and ascending list. df.sort_values(by=['temperature', 'city'], ascending=[False, True]) reverses columns. df.sort_values(by=['city', 'temperature'], ascending=False) uses a single boolean for two columns. df.sort_values(['city', 'temperature'], ascending=[False, True]) has wrong ascending order.
  4. Final Answer:

    df.sort_values(by=['city', 'temperature'], ascending=[True, False]) -> Option A
  5. Quick Check:

    Multi-column sort uses lists for by and ascending [OK]
Hint: Use lists for by and ascending to sort multiple columns [OK]
Common Mistakes:
  • Using single boolean for multiple columns
  • Mixing column order in by list
  • Wrong ascending order list
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard