﻿ Pandas DataFrame: Sort the data frame first by 'name' in descending order, then by 'score' in ascending order - w3resource

# Pandas DataFrame: Sort the data frame first by 'name' in descending order, then by 'score' in ascending order

## Pandas: DataFrame Exercise-16 with Solution

Write a Pandas program to sort the data frame first by 'name' in descending order, then by 'score' in ascending order.

Sample DataFrame:
exam_data = {'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Values for each column will be:
name : 'Suresh', score: 15.5, attempts: 1, qualify: ‘yes’, label: ‘k’

Sample Solution :

Python Code :

``````import pandas as pd
import numpy as np
exam_data  = {'name': ['Anastasia', 'Dima', 'Katherine', 'James', 'Emily', 'Michael', 'Matthew', 'Laura', 'Kevin', 'Jonas'],
'score': [12.5, 9, 16.5, np.nan, 9, 20, 14.5, np.nan, 8, 19],
'attempts': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(exam_data , index=labels)
print("Orginal rows:")
print(df)
df.sort_values(by=['name', 'score'], ascending=[False, True])
print("Sort the data frame first by ‘name’ in descending order, then by ‘score’ in ascending order:")
print(df)
``````

Sample Output:

```Orginal rows:
name  score  attempts qualify
a  Anastasia   12.5         1     yes
b       Dima    9.0         3      no
c  Katherine   16.5         2     yes
d      James    NaN         3      no
e      Emily    9.0         2      no
f    Michael   20.0         3     yes
g    Matthew   14.5         1     yes
h      Laura    NaN         1      no
i      Kevin    8.0         2      no
j      Jonas   19.0         1     yes
Sort the data frame first by ‘name’ in descending order, then by ‘score’ in ascending order:
name  score  attempts qualify
a  Anastasia   12.5         1     yes
b       Dima    9.0         3      no
c  Katherine   16.5         2     yes
d      James    NaN         3      no
e      Emily    9.0         2      no
f    Michael   20.0         3     yes
g    Matthew   14.5         1     yes
h      Laura    NaN         1      no
i      Kevin    8.0         2      no
j      Jonas   19.0         1     yes
```

Python-Pandas Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.

﻿

## Python: Tips of the Day

Inserting if statements using conditional list comprehensions:

```x = [1, 2, 3, 4, 5, 6]
result = []
for idx in range(len(x)):
if x[idx] % 2 == 0:
result.append(x[idx] * 2)
else:
result.append(x[idx])
result
```

Output:

```[1, 4, 3, 8, 5, 12]
```
`[(element * 2 if element % 2 == 0 else element) for element in x]`

Output:

```[1, 4, 3, 8, 5, 12]
```
`[element * 2 for element in x if element % 2 == 0]`

Output:

```[4, 8, 12]
```