Уровень сортировки серий в пандах

python python-3.x sorting pandas series

65 просмотра

1 ответ

У меня есть датафрейм mydf

mydf

введите описание изображения здесь

Я выполнил приведенную ниже операцию, и она затем была преобразована в серию.

mydf.groupby([mydf.type,mydf.name]).size()

Теперь у меня есть серия с двумя уровнями типа: актер и актриса.

    type      name               
    actor    'Big' Ben Moroz        1
             'Ducky' Louie          3
             'Fast' Eddie Mahler    1
             'King Kong' Kashey     1
             'Muddy' Berry          1

    actress   Zedra Conde           3
              Zena Marshall         1
              Zinaida Morskaya      1
              Zoe Holland           1
              Zoia Karabanova       2

Теперь я хочу, чтобы мой результат сортировался в порядке убывания в акторе уровня, и если «значение» актера (заданное в третьем безымянном столбце, скажем) одинаково, тогда сортировка должна выполняться по «имени», а затем при сортировке должен следовать тот же шаблон делается на другом уровне под названием актриса

type      name               
actor    'Ducky' Louie          3
         'Big' Ben Moroz        1
         'Fast' Eddie Mahler    1
         'King Kong' Kashey     1
         'Muddy' Berry          1

actress   Zedra Conde           3
          Zoia Karabanova       2
          Zena Marshall         1
          Zinaida Morskaya      1
          Zoe Holland           1

Примечание: - Пожалуйста, избегайте зацикливания.

Автор: user110244 Источник Размещён: 08.11.2019 11:18

Ответы (1)


0 плюса

К сожалению, все, что я придумал, требует двойной группировки / сортировки. Предположим, у нас есть DataFrame

import pandas as pd
import numpy as np
import random

d = pd.DataFrame({'type': ['actor']*5+['actress']*5,  
                  'name' : [random.choice(['a', 'b', 'c']) for i in range(10)]})
d


    name    type
0   c   actor
1   c   actor
2   a   actor
3   b   actor
4   a   actor
5   c   actress
6   c   actress
7   c   actress
8   a   actress
9   a   actress


d.groupby([d.type,d.name]).size()

type     name
actor    a       2
         b       1
         c       2
actress  a       2
         c       3
dtype: int64

Подход 1:

d.groupby([d.type,d.name]).size().groupby(level=[0]).apply(lambda x: x.sort_values(ascending=False))

type     type     name
actor    actor    c       2
                  a       2
                  b       1
actress  actress  c       3
                  a       2
dtype: int64

Подход 2:

d1 = d.groupby([d.type,d.name]).size()
d2 = d1.reset_index()
d2.columns = ['type', 'actress', 'sz']
d2.sort_values(by = ['type',  'sz', 'actress'], ascending = [True, False, True])

    type    actress sz
0   actor   a   2
2   actor   c   2
1   actor   b   1
4   actress c   3
3   actress a   2
Автор: Andrey Vykhodtsev Размещён: 20.08.2016 04:01
Вопросы из категории :
32x32