Как отсортировать таблицу данных / сводную таблицу по отдельному количеству подкатегорий? - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь отсортировать первый столбец фрейма данных по различному количеству второго столбца, соответствующего значению первого столбца.

Несортированные данные из сводной таблицы:

investor  company round roundSize
investor1   Foo     A      10
investor2   Bar     A      10
            Foo     A      10
investor3   Bar     A      10
                    B      15
investor4   Bar     B      15
            Baz     C      100
            Foo     A      10

После сортировки таблица должна быть:

investor  company round roundSize
investor4   Bar     B      15
            Baz     C      100
            Foo     A      10
investor2   Bar     A      10
            Foo     A      10
investor3   Bar     A      10
                    B      15
investor1   Foo     A      10

Здесь столбец 2 (компания)Отличный счетчик для инвестора4 равен 3, поэтому инвестор4 и соответствующие значения должны быть наверху.

инвестор3 и инвестор1 имеют счетчик 2, было бы здорово применить вторичную (но не обязательную) сортировку для подсчета округления или среднего значения округления.

Я довольно новичок в python / pandas - но я изо всех сил пытаюсь найти пример, где это было применено. Документация на панд хороша, но не совсем касается такого рода проблем.

https://pandas.pydata.org/pandas-docs/version/0.15.0/reshaping.html

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 02 ноября 2019

Сброс индекса, чтобы сводная таблица приняла форму DataFrame

>>> df = df.reset_index(drop=True)
>>> df
    investor company round  roundSize
0  investor1     Foo     A         10
1  investor2     Bar     A         10
2  investor2     Foo     A         10
3  investor3     Bar     A         10
4  investor3     Bar     B         15
5  investor4     Bar     B         15
6  investor4     Baz     C        100
7  investor4     Foo     A         10

Создать sort index и отсортировать по этому столбцу

>>> df['sort_idx'] = df.groupby('investor')['company'].transform('nunique')
>>> df.sort_values('sort_idx', ascending=False)
    investor company round  roundSize  sort_idx
5  investor4     Bar     B         15         3
6  investor4     Baz     C        100         3
7  investor4     Foo     A         10         3
1  investor2     Bar     A         10         2
2  investor2     Foo     A         10         2
0  investor1     Foo     A         10         1
3  investor3     Bar     A         10         1
4  investor3     Bar     B         15         1
...