How can I sort rows in a Pandas Dataframe by the absolute value of an expression involving a column?

You can use the Pandas Dataframe’s sort_values method, passing in the column name and the absolute value of an expression as arguments. This will sort the rows in the Dataframe based on the absolute value of the expression involving the specified column.


You can use the following methods to sort the rows of a pandas DataFrame based on the absolute value of a column:

Method 1: Sort by Absolute Value (smallest abs. value shown first)

df.reindex(df['my_column'].abs().sort_values().index)

Method 2: Sort by Absolute Value (largest abs. value shown first)

df.reindex(df['my_column'].abs().sort_values(ascending=False).index)

The following examples show how to use each method in practice with the following pandas DataFrame that contains information about various basketball players:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   'over_under': [4, -9, 2, 0, 1, 12, -4, -5]})
                   
#view DataFrame
print(df)

  player  over_under
0      A           4
1      B          -9
2      C           2
3      D           0
4      E           1
5      F          12
6      G          -4
7      H          -5

Example 1: Sort by Absolute Value (smallest abs. value shown first)

We can use the following syntax to sort the rows of the DataFrame based on the absolute value of the over_under column:

#sort DataFrame based on absolute value of over_under column
df_sorted = df.reindex(df['over_under'].abs().sort_values().index)

#view sorted DataFrame
print(df_sorted)

  player  over_under
3      D           0
4      E           1
2      C           2
0      A           4
6      G          -4
7      H          -5
1      B          -9
5      F          12

Notice that the rows are sorted from smallest absolute value in the over_under column to largest absolute value.

Example 2: Sort by Absolute Value (largest abs. value shown first)

We can use the following syntax to sort the rows of the DataFrame based on the absolute value of the over_under column:

#sort DataFrame based on absolute value of over_under column
df_sorted = df.reindex(df['over_under'].abs().sort_values(ascending=False).index)

#view sorted DataFrame
print(df_sorted)

  player  over_under
5      F          12
1      B          -9
7      H          -5
0      A           4
6      G          -4
2      C           2
4      E           1
3      D           0

Notice that the rows are sorted from largest absolute value in the over_under column to smallest absolute value.

Note: You can find the complete documentation for the pandas sort_values() function .

x