Напишите пользовательскую функцию агрегирования в Pandas
Pandas в Python широко используется для анализа данных и состоит из некоторых прекрасных структур данных, таких как Dataframeand Series. В pandas есть несколько функций, которые могут оказаться большим подспорьем для программиста, одна из них - агрегатная функция. Эта функция возвращает одно значение из нескольких значений, взятых на вход, которые сгруппированы вместе по определенным критериям. Некоторые из агрегатных функций, среди прочего, являются средними, счетчиками, максимальными.
Syntax: DataFrame.agg(func=None, axis=0, *args, **kwargs)
Parameters:
- axis: {0 or ‘index’, 1 or ‘columns’} = 0 or ‘index’ means the function is applied to each column and 1 or ‘columns’ means the function is applied to each row.
- func: function, str, list or dict = It describes the function that is to be used for aggregation. Accepted combinations are: function, string function name (str), list of functions (list/dict).
- *args: It specifies the positional arguments to pass to the function.
- **kwargs: It specifies the keyword arguments to pass to the function.
Return: This function can return scalar, Series or Dataframe. The return is scalar when Series.agg is called with a single function, it is Series when Dataframe.agg is called with a single function, it will be Dataframe when Dataframe.agg is called with several functions.
Создадим Dataframe:
Python3
# import pandas libraryimport pandas as pd # create a Dataframedf = pd.DataFrame([[10, 20, 30], [40, 50, 60], [70, 80, 90], [100,110,120]], columns=["Col_A", "Col_B", "Col_C"])# show the dataframedf |
Выход:

Теперь выполним несколько операций:
1. Выполнение агрегирования по строкам: выполняет агрегатные функции по строкам фрейма данных. Как вы можете видеть в приведенных ниже примерах, в примере 1 внутри агрегатной функции есть два ключевых слова: sum и min. Сумма складывает первый (10,40,70,100), второй (20,50,80,110) и третий (30,60,90,120) элементы каждой строки отдельно и распечатывает его, min находит минимальное число среди элементов строк и распечатайте его. Аналогичный процесс со вторым примером.
Example 1:
Python3
df.agg(["sum", "min"]) |
Выход:

Example 2:
Python3
df.agg(["sum", "min", "max"]) |
Выход:

2. Выполнение агрегирования по столбцам: выполняет агрегатную функцию по столбцам, столбцы выбираются, в частности, как показано в примерах. В первом примере выбраны два столбца: «Col_A» и «Col_B», и над ними должны быть выполнены операции. Для Col_A вычисляются минимальное значение и суммарное значение, а для Col_B вычисляются минимальное и максимальное значение. Аналогичный процесс с примером 2.
Example 1:
Python3
df.agg({"Col_A" : ["sum", "min"], "Col_B" : ["min", "max"]}) |
Выход:

Example 2:
Python3
df.agg({"Col_A" : ["sum", "min"], "Col_B" : ["min", "max"], "Col_C" : ["sum", "mean"]}) |
Выход:

Примечание: он напечатает NaN, если конкретная агрегация не выполняется для определенного столбца.
3. Выполнение агрегирования по столбцам: выполняет агрегатную функцию по столбцам. Как показано в примере 1, среднее значение первого (10,20,30), второго (40,50,60), третьего (70,80,90) и четвертого (100,110,120) элементов каждого столбца вычисляется отдельно и печатается.
Example:
Python3
df.agg("mean", axis = "columns") |
Выход:

4 . Пользовательская агрегатная функция: иногда возникает необходимость создать нашу собственную агрегатную функцию.
Example: Consider a data frame consisting of student id (stu_id), subject code (sub_code) and marks (marks).
Python3
# import pandas libraryimport pandas as pd # Creating DataFramedf = pd.DataFrame( {"stud_id" : [101, 102, 103, 104, 101, 102, 103, 104], "sub_code" : ["CSE6001", "CSE6001", "CSE6001", "CSE6001", "CSE6002", "CSE6002", "CSE6002", "CSE6002"], "marks" : [77, 86, 55, 90, 65, 90, 80, 67]}) # Printing DataFramedf |
Выход:

Now if you need to calculate the total marks (marks of two subjects) of each student (unique stu_id). This process can be done using custom aggregate function. Here my custom aggregate function is ‘total’.
Python3
# Importing reduce for # rolling computationsfrom functools import reduce # define a Custom aggregation # function for finding totaldef total(series): return reduce(lambda x, y: x + y, series) # Grouping the output according to # student id and printing the corresponding # total marks and to check whether the# output is correct or not, sum function # is also used to print the sum.df.groupby("stud_id").agg({"marks": ["sum", total]}) |
Выход:

Как видите, оба столбца имеют одинаковые значения итоговых оценок, поэтому наша агрегатная функция правильно вычисляет итоговые оценки в этом случае.
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.