Цепочка методов (или цепочка вызовов, method chaining) - это стиль записи кода, который позволяет выполнять несколько операций за один раз, в конечном счете экономя время и энергию. Для тех, кто не знаком с этой концепцией, это, по сути, способ применения нескольких методов или функций к данным в одной строке кода. Традиционный подход к использованию pandas предполагает использование отдельных функций и команд по одной за раз. Это может стать довольно утомительным и трудным для запоминания. Кроме того, если что-то пойдет не так, может быть трудно устранить неполадки, поскольку было использовано несколько операций. У меня еще была привычка, прыгать с одной ячейке на другую, вот тогда точно можно не вспомнить, что ты делал и проще переписать все заново. Метод цепочки поможет устранить эту проблему. Объединяя методы в цепочку, можно легко выполнять несколько операций одновременно. Это сокращает время, затрачиваемое на написание кода, а также облегчает чтение и его отладку. Метод цепочки имеет несколько преимуществ: позволяет одновременно манипулировать фреймами данных несколькими способами, что делает его отличным инструментом для решения сложных задач. значительно упрощает отладку и чтение кода в будущем. Твой будущий Я скажет тебе спасибо! снижает количество создаваемых переменных до минимума. Больше никаких головных болей про название переменных. позволяет избежать проблемы SettingWithCopyWarning, которая может возникнуть при попытке изменить копию фрейма данных вместо оригинала. считается, что цепочка методов более эффективна, чем отдельные шаги, поскольку операции могут выполняться последовательно без создания промежуточных фреймов, которые увеличивают использование памяти pandas. Этот метод активно продвигает Matt Harrison (гуглится по Idiomatic Pandas, Effective Pandas: Patterns for Data Manipulation, есть интересные выступления на PyData). Так же цепочка методов упоминается в официальном cheetsheet pandas, но как по мне слишком вскользь и в незаметном левом углу, учитывая как этот метод прокачивает читаемость кода: Важно понимать потенциальные недостатки и проблемам, прежде чем переходить к этому подходу: наверное такой стиль может не подойти новичкам - хотя процесс объединения операций может показаться простым, но каждая операция изменяет данные, и эти изменения могут быть не совсем понятны пользователю если у него мало практики.  может быть неэффективным в вычислительном отношении. Если для анализа требуется много операций, стоимость их выполнения в рамках одной операции может быть довольно высокой. Цепочка вызова методов, является распространенным синтаксисом для вызова нескольких методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединять вызовы в единую структуру, не требуя переменных для хранения промежуточных результатов. это может уменьшить длину всего кода, поскольку не нужно создавать бесчисленное количество переменных. это может повысить читабельность кода, поскольку методы вызываются последовательно. Пример на простом классе Cat: Т.к. методы у нас не возвращают экземпляр класс (self), то мы последовательно применяем их, чтобы установить кличку и породу: Но если мы добавим  return self  в каждый метод, то уже сможем скомбинировать нашего кота в цепочку:  Так же и в pandas, наша цель уйти от этого: К этому: Такая запись поможет существенно увеличить читабельность кода. Метод pipe в pandas - это инструмент связывания воедино несколько функций с помощью одного вызова. Что позволяет выполнять несколько последовательных операций с одним и тем же фреймом без необходимости сохранять промежуточные результаты в отдельных переменных. Метод pipe особенно полезен при работе с большими наборами данных и сложными операциями, такими как преобразование, агрегирование данных и позволяет сделать все за один шаг. Код для использования метода pipe относительно прост. Все, что нужно сделать, это передать функцию методу pipe(). Функции будут выполняться по порядку, и выходные данные каждой последующей функции будут входными данными следующей функции. Как только метод pipe() завершит выполнение, результатом будет вывод последней функции в списке. Рассмотрим простой пример того, как можно использовать метод pipe: ▍Использование lambda дает серьезное преимущество, так как мы получаем текущий фрейм данных. Вместо того чтобы писать несколько строк кода для выполнения нескольких операций, одни и те же операции могут быть выполнены в одной строке. Кроме того, поскольку метод pipe() возвращает фрейм, что поможет создавать сложные конвейеры функций, связывая их вместе. Метод assign в pandas используется для назначения новых столбцов фрейму данных. Этот метод позволяет вам создавать новые столбцы или присваивать новые значения существующим столбцам для каждой строки фрейма. С помощью assign можно включать вычисления, константы и даже другие фреймы в качестве источника значений в новых столбцах. Примеры: Как можно заметить, метод assign+lambda обеспечивает большую гибкость, когда дело доходит до добавления новых столбцов и данных во фрейм. Метод query в pandas позволяет извлекать определенные строки из фрейма на основе определенных условий. Метод принимает строку, содержащую допустимое выражение, которое может ссылаться на столбцы внутри фрейма. Это обеспечивает интуитивно понятный способ выбора и фильтрации строк из фрейма данных на основе определенных критериев. По сути, это создание сложных запросов для выбора конкретных данных. Допускается использование логических операторов, такие как  "&", "|" и "~", для создания более специфичных фильтров. Кроме того, метод можно использовать для сравнения числовых значений между различными записями, операций со строками, логическими операциями и т.д. Что делает его особенно полезным, так как это возможность легко комбинировать несколько условий вместе. ▍Так как все уже посчитали выживших на Титанике, лепестки Ириса, классифицировали пингвинов Палмера, то будем использовать реальные данные - найдем топ пять месторождений по добыче нефти на четырех производственных предприятиях. Использовать будем реальную отчетную табличку с планами нефтяного общества на 2023, только немного зашифрованную: Наша задача будет состоять в том, чтобы выделить топ пять месторождений с максимальной добычей нефти (оставшиеся определим как "остальные") и построить график среднесуточной добычи (по месяцам) по каждому предприятию использую цепочку вызовов: Необходимые библиотеки: Читаем наш excel файл и сразу смотрим на него: Для того, чтобы не использовать "\" для переноса и перейти к chaining мы должны обернуть df в скобки: оставим только нужные нам столбцы (выведем их в отдельную переменную словаря) избавившись от кварталов и не заполненного факта, начнем создавать нашу цепочку методов: Далее нам нужно соотнести добычу нефти по предприятиям, месторождениям, объектам. чтобы исключить повторение кода (нам еще нужно вытащить месторождения и объекты) создадим функцию и вызовем ее с помощью метода pipe: все прошло как и ожидали - получили три новых колонки с предприятиями, месторождениями и объектами: оставляем только месторождения, удаляем колонку объекты и фильтруем показатель по добыче нефти: ▍В новых версиях была расширена функциональность и теперь можно вызывать методы pd.Series из query. Не уверен как давно это было введено. Превратим форму таблицы в длинную (long) и удалим слово месторождение из одноименной колонки. Через функцию _group_top_n_fields выделим топ пять месторождений, оставив себе пространство для маневра (вдруг потом захотим посмотреть не пять месторождений, а десять): Теперь давайте изменим столбец месяц так, чтобы его можно было сортировать от января до декабря, для этого используя функцию pd.date_range и свойство категориального типа в Pandas ordered=True (т.к. кода стало много, уберем его под спойлер для удобства):  Чтобы нивелировать кол-во дней в месяце (январь - 31, февраль - 28, апрель - 30), найдем среднесуточную добычу нефти (добычу нефти разделим на кол-во дней в месяце). Кол-во дней добавим через pd.Series.map({}) и чтобы не усложнять код, вынесем на словарь в отдельную переменную: ▍Интересно, что в pandas уже заложены имена месяцев на русском языке и просто добавив в month_name(locale='Ru') можно их оттуда забрать. Все вместе:  Все, наша табличка готова! Теперь, можно все действия определить или в функцию или в отдельный класс, кто как любит.  Для месторождений будем использовать Area plot(или диаграмма с областями), комбинировать вместе будем через функцию pipe, все также придерживаясь method chaining: Первая часть нашей задачи выполнена. Теперь добавим суммарную добычу по каждому предприятию(сделаем это необязательным показателем) и уберем "предприятие=" из названий графиков. Можно это все провернуть с помощью lambda, но я выделю для этого отдельную функцию, чтобы не усложнять чтение кода в будущем: Все готово: Дальше можно еще шаманить, перекрасить, добавлять комментарии и т.д. и т.п. Спасибо всем кто дочитал до конца. Выше показано как можно взять "традиционный код" и реорганизовать его при помощи chaining и функций. Может кто использует этот метод? Или есть еще какие инсайды?