Но они все равно вам пригодятся
Несколько месяцев назад я опубликовал статью о том, как освоить групповую функцию в Pandas. Затем несколько дней назад мой друг задал вопрос, и его также можно решить с помощью функции groupby. Итак, сегодня я перечисляю несколько менее известных приложений, которые можно реализовать с помощью функции группировки.
(Если вы не читали мою предыдущую статью о функции группировки, продолжайте. Это поможет вам быстрее понять эту статью.)
1. Процент по каждой группе
В сводной таблице Excel вы можете выбрать отображение процентной доли родительской суммы. Это означает, что сводная таблица показывает процент каждого элемента от общего родительского промежуточного итога. Это легко сделать в функции Pandas groupby с помощью лямбда.
>>> import pandas as pd >>> df = pd.DataFrame({'A':['a','b','c']*2, ... 'B':['d','e']*3, ... 'C':[1,3,6,10,12,16] ... }) >>> df A B C 0 a d 1 1 b e 3 2 c d 6 3 a e 10 4 b d 12 5 c e 16 # First Groupby >>> df['Perc_gpby_A'] = df.groupby('A')['C'].apply(lambda x: x/x.sum()) # Second Groupby >>> df['Perc_gpby_B'] = df.groupby('B')['C'].apply(lambda x: x/x.sum()) >>> df A B C Perc_gpby_A Perc_gpby_B 0 a d 1 0.090909 0.052632 1 b e 3 0.200000 0.103448 2 c d 6 0.272727 0.315789 3 a e 10 0.909091 0.344828 4 b d 12 0.800000 0.631579 5 c e 16 0.727273 0.551724
Основным ключевым моментом из приведенного выше примера является то, что вы выбираете соответствующий уровень группировки в функции groupby. В первом операторе groupby уровень группировки - столбец A. Всего существует три группы: a, b и c. Затем столбец C будет применен с лямбда-функцией. Лямбда-функция x/x.sum()
. Следовательно, каждое значение в столбце C будет разделено на сумму соответствующей группы. Например, сумма для группы a равна 11. Следовательно, в строках 0 и 3 значение c будет разделено на 11. Таким образом, результат будет 0,0909 и 0,9091. То же самое для оставшихся двух групп в столбце A и втором операторе groupby.
Помимо использования лямбда-функции, использование transform
также может выполнять аналогичные вычисления.
>>> df['Perc_gpby_A'] = df['C']/df.groupby('A')['C'].transform('sum') >>> df['Perc_gpby_B'] = df['C']/df.groupby('B')['C'].transform('sum') >>> df A B C Perc_gpby_A Perc_gpby_B 0 a d 1 0.090909 0.052632 1 b e 3 0.200000 0.103448 2 c d 6 0.272727 0.315789 3 a e 10 0.909091 0.344828 4 b d 12 0.800000 0.631579 5 c e 16 0.727273 0.551724
2. Преобразовать в list / dict
Это то, о чем мой друг спросил несколько дней назад. Если вы хотите сгруппировать все значения в одной группе в виде списка или словаря, этот раздел даст вам ответ.
>>> df = pd.DataFrame({'A':['a','b','c']*2, ... 'B':['d','e']*3, ... 'C':[1,3,6,10,12,16] ... }) >>> df.groupby('A')['C'].apply(list) A a [1, 10] b [3, 12] c [6, 16] Name: C, dtype: object >>> type(df.groupby('A')['C'].apply(list)) <class 'pandas.core.series.Series'>
В приведенном выше примере после groupby('A')
apply(list)
группирует все значения в ту же группу, что и форма списка. Окончательный результат представлен в виде серии. На этом уровне вы можете в дальнейшем преобразоваться в список или диктант.
>>> df.groupby('A')['C'].apply(list).to_list() [[1, 10], [3, 12], [6, 16]] >>> df.groupby('A')['C'].apply(list).to_dict() {'a': [1, 10], 'b': [3, 12], 'c': [6, 16]}
Конечно, вы также можете выбрать set
in apply
function.
>>> df.groupby('B')['C'].apply(set).to_dict() {'d': {1, 12, 6}, 'e': {16, 10, 3}}
3. Наиболее распространенное значение по группам
>>> df = pd.DataFrame({'A':list('ab'*4), ... 'B':list('c'*2+'d'+'e'*5)}) >>> df A B 0 a c 1 b c 2 a d 3 b e 4 a e 5 b e 6 a e 7 b e >>> df.groupby('A')['B'].agg(pd.Series.mode) A a e b e Name: B, dtype: object
Я не думаю, что здесь нужно много объяснений. С agg(pd.Series.mode)
вы можете получить наиболее частое значение для каждой группы.
Коды этих трех приложений довольно просты, но они все же могут помочь вам лучше обрабатывать группировку данных. Я надеюсь, что в следующий раз вы сможете использовать функцию groupby не только для простого агрегирования. Это все для этой статьи. Спасибо, что прочитали, и увидимся в следующий раз.
Другие мои статьи о Python
Вы говорите людям, что вы новичок в Python, если задаете этот вопрос.
Добавьте это в закладки, если вы новичок в Python (особенно если вы изучаете Python самостоятельно)