Based on python, sort descending dataframe with pandas:
Given:
from pandas import DataFrame
import pandas as pd
d = {'x':[2,3,1,4,5],
'y':[5,4,3,2,1],
'letter':['a','a','b','b','c']}
df = DataFrame(d)
df then looks like this:
df:
letter x y
0 a 2 5
1 a 3 4
2 b 1 3
3 b 4 2
4 c 5 1
I would like to have something like:
f = lambda x,y: x**2 + y**2
test = df.sort(f('x', 'y'))
This should order the complete dataframe with respect to the sum of the squared values of column 'x' and 'y' and give me:
test:
letter x y
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a 2 5
Ascending or descending order does not matter. Is there a nice and simple way to do that? I could not yet find a solution.
You can sort pandas DataFrame by one or multiple (one or more) columns using sort_values() method and by ascending or descending order. To specify the order, you have to use ascending boolean property; False for descending and True for ascending.
To sort the DataFrame based on the values in a single column, you'll use . sort_values() . By default, this will return a new DataFrame sorted in ascending order. It does not modify the original DataFrame.
Pandas series aka columns has a unique() method that filters out only unique values from a column. The first output shows only unique FirstNames. We can extend this method using pandas concat() method and concat all the desired columns into 1 single column and then find the unique of the resultant column.
You can create a temporary column to use in sort and then drop it:
df.assign(f = df['one']**2 + df['two']**2).sort_values('f').drop('f', axis=1)
Out:
letter one two
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a 2 5
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With