1

I am using python 3 pandas.

My data frame looks like this :

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([['eve', "A", True],['eve', 'C', True], ['nathan', 'B', False],['eve', 'C', True], ['eric', 'C', True],['eric', 'D', True]]),
                   columns=['Name', 'Level', 'Date'])

output :

    Name    Level   Date
0   eve     A   True
1   eve     C   True
2   nathan  B   False
3   eve     C   True
4   eric    C   True
4   eric    D   True

I would like to get :

Name    Level    Date

Eve     A        True
        C        True
        C        True

eric    C        True
eric    D        True 
nathan  B        False

   

Thanks in advance

zabop
  • 6,750
  • 3
  • 39
  • 84
hugo
  • 441
  • 5
  • 25

1 Answers1

1

If you have:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([['eve', "A", True],['eve', 'C', True], ['nathan', 'B', False],['eve', 'C', True], ['eric', 'C', True]]),
                   columns=['Name', 'Level', 'Date'])

You can do to order rows by the Name column:

df.sort_values('Name')

Which will give you this:

    Name    Level   Date
4   eric    C   True
0   eve     A   True
1   eve     C   True
3   eve     C   True
2   nathan  B   False

Ie in a notebook:

enter image description here

If you want to order rows by frequency of its content in the Name column, you can do, relying on this & this:

sorteddf = df.assign(frequency = df.groupby('Name')['Name'].transform('count')).sort_values(by=['frequency'],ascending=False).drop('frequency',1)

Giving:

enter image description here

zabop
  • 6,750
  • 3
  • 39
  • 84