I'll start by saying I am a Python beginner, I did try and find an answer to this via similar questions but I'm struggling to grasp some of the solutions in order to tailor them for my own use.
If I have a Pandas dataframe as follows:
What code would I need in order to sort it as per the below whilst excluding the 0 value. I would ideally want to grab the value closest to zero (assuming this is possible).
CodePudding user response:
IIUC, you can set abs
as a key parameter of pandas.DataFrame.sort_values
.
Try this :
out = df.sort_values(by="Score", key=abs)
# Output :
print(out)
Name Score
3 maggie 0
2 sally -5
1 jane -10
4 peter 15
6 andy 25
0 bob -30
5 mike 50
CodePudding user response:
You can use df.sort_values() and pass abs
as a parameter. This will sort by the absolute value but leave the values themselves unchanged:
import pandas as pd
df = pd.DataFrame({'Name': ['Bob', 'Jane', 'Sally', 'Maggie', 'Peter', 'Mike', 'Andy'],
'Score': [-30, -10, -5, 0, 15, 50, 25]})
df.sort_values('Score', key = abs)
Output:
Name | Score |
---|---|
Maggie | 0 |
Sally | -5 |
Jane | -10 |
Peter | 15 |
Andy | 25 |
Bob | -30 |
Mike | 50 |
This also works:
df.reindex(df['Score'].abs().sort_values().index)
See here for more: Sorting by absolute value without changing the data