Как мне получить доступ к данным внутри группового объекта pandas dataframe? - PullRequest
0 голосов
/ 28 августа 2018

Используя следующий код, df_grouped был создан.

df_grouped = df.groupby(by='Pclass')

Ниже цикла печатается значение Pclass, а также длина каждой сгруппированной суммы.

for val,grp in df_grouped:
    print('There were',len(grp),'people traveling in',val,'class.')

Как код получает доступ к информации? Как можно использовать val & grp без предварительной ссылки? Как эта информация хранится внутри объекта groupby?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Ссылка на docs : "Атрибут groups - это dict, ключами которого являются вычисленные уникальные группы, а соответствующими значениями являются метки осей, принадлежащих каждой группе"

Вам может быть интересно посмотреть на .agg(), например:

df = pd.DataFrame([['Person A', 2, 3, 4],
                ['Person B', 3, 2, 1],
                ['Person C', 5, 7, 5],
                ['Person A', 3, 4, 9],
                ['Person C', 8, 3, 2]],
                columns=['Person','Val 1','Val 2','Val 3'])

Дает следующий фрейм данных:

     Person  Val 1  Val 2  Val 3
0  Person A      2      3      4
1  Person B      3      2      1
2  Person C      5      7      5
3  Person A      3      4      9
4  Person C      8      3      2

Затем выполните groupyby и agg:

df.groupby('Person').agg({'Val 1': 'sum', 'Val 2': 'mean', 'Val 3': 'count'})

Дает:

          Val 1  Val 2  Val 3
Person                       
Person A      5    3.5      2
Person B      3    2.0      1
Person C     13    5.0      2

Здесь вы можете просто передать словарь в agg, который определяет операции, которые вы хотели бы выполнить в каждой группе для определенного столбца.

0 голосов
/ 28 августа 2018

Как отмечено в документации Group By: split-apply-объединить , данные хранятся в GroupBy object, который представляет собой структуру данных со специальными атрибутами .

Вы можете убедиться в этом сами:

>>> type(df_grouped)

Должен вернуться:

<class 'pandas.core.groupby.DataFrameGroupBy'>

Структура данных хорошо объяснена этим фрагментом из документов:

Атрибут groups - это диктовка, ключами которой являются вычисленные уникальные группы, а соответствующими значениями являются метки осей, принадлежащих каждой группе.

Как вы заметили, вы можете легко перебирать каждую отдельную группу. Тем не менее, часто существуют векторизованные методы, которые очень хорошо работают с groupby объектами и могут получать доступ к информации и вычислять вещи намного эффективнее и быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...