{"id":346682,"date":"2023-03-14T03:00:41","date_gmt":"2023-03-14T03:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=346682"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=346682","title":{"rendered":"<span>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 pandas. \u041f\u0440\u043e\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434. \u041c\u0438\u043d\u0438\u0433\u0430\u0439\u0434 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bcb\/f4b\/ae1\/bcbf4bae1fa2472d0dc4866cf80fae3c.png\" alt=\"\u0421\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430\u044f \u043f\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.\" title=\"\u0421\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430\u044f \u043f\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.\" width=\"1024\" height=\"1024\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bcb\/f4b\/ae1\/bcbf4bae1fa2472d0dc4866cf80fae3c.png\"\/><\/p>\n<div><figcaption>\u0421\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430\u044f \u043f\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u0438\u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432,<\/strong> <strong>method chaining)<\/strong> &#8212; \u044d\u0442\u043e \u0441\u0442\u0438\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u044f \u0432\u0440\u0435\u043c\u044f \u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u044e.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439, \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e pandas \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430 \u0440\u0430\u0437. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043a\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <span class=\"habrahidden\">\u0423 \u043c\u0435\u043d\u044f \u0435\u0449\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430, \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e, \u0432\u043e\u0442 \u0442\u043e\u0433\u0434\u0430 \u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u044b \u0434\u0435\u043b\u0430\u043b \u0438 \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043d\u043e\u0432\u043e.<\/span><\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u042d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0435\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/li>\n<li>\n<p>\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. <strong>\u0422\u0432\u043e\u0439 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u042f \u0441\u043a\u0430\u0436\u0435\u0442 \u0442\u0435\u0431\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e!<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0431\u043e\u043b\u0435\u0439 \u043f\u0440\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b SettingWithCopyWarning, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430, \u0447\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0433\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 pandas.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u0442 <strong>Matt Harrison<\/strong> <span class=\"habrahidden\">(\u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u00a0Idiomatic Pandas, Effective Pandas: Patterns for Data Manipulation, \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 PyData)<\/span>. \u0422\u0430\u043a \u0436\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c cheetsheet pandas, \u043d\u043e \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u0438 \u0432 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u043c \u043b\u0435\u0432\u043e\u043c \u0443\u0433\u043b\u0443, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/699\/b99\/21f\/699b9921f6f163a5b4098ebc275eb25a.PNG\" alt=\"\u0423\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 Method Chaining \u0432 CheetSheet \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 pandas.\" title=\"\u0423\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 Method Chaining \u0432 CheetSheet \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 pandas.\" width=\"624\" height=\"599\"\/><\/p>\n<div><figcaption>\u0423\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 Method Chaining \u0432 CheetSheet \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 pandas.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0443:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0438\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c &#8212; \u0445\u043e\u0442\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043d\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0435\u0441\u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u043c\u0430\u043b\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0440\u043e\u043b\u043e\u0433: \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u041e\u041e\u041f<\/h2>\n<p><strong>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432,<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<ul>\n<li>\n<p>\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 Cat:<\/p>\n<pre><code class=\"python\">class Cat:     def __init__(self, name=None, breed=None):         self.name = name         self.breed = breed      def set_name(self, name):         self.name = name      def set_breed(self, breed):         self.breed = breed      def __repr__(self, ):         class_name = type(self).__name__         attr = ', '.join([f'{i}={v!r}' for i, v in self.__dict__.items()])         return f\"{class_name}({attr})\"<\/code><\/pre>\n<p>\u0422.\u043a. \u043c\u0435\u0442\u043e\u0434\u044b \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441 (self), \u0442\u043e \u043c\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0438\u0447\u043a\u0443 \u0438 \u043f\u043e\u0440\u043e\u0434\u0443:<\/p>\n<pre><code class=\"python\">djon_the_cat = Cat()  djon_the_cat.set_name('Djon') djon_the_cat.set_breed('Siamse') >>> Cat(name='Djon', breed='siamse')<\/code><\/pre>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c  return self  \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u043e \u0443\u0436\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0442\u0430 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443:<\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c self<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class Cat:     def __init__(self,name=None,breed=None):         self.name=name         self.breed=breed          def set_name(self,name):         self.name=name         #\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c return self         return self              def set_breed(self,breed):         self.breed=breed           #\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c return self         return self          def __repr__(self,):         class_name=type(self).__name__         attr=', '.join([f'{i}={v!r}' for i,v in self.__dict__.items()])         return f\"{class_name}({attr})\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"python\">djon_the_cat = Cat().set_name('Djon').set_breed('Siamse') >>> Cat(name='Djon', breed='siamse')<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0438 \u0432 pandas, \u043d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c \u0443\u0439\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"python\">df = pd.read_excel('.\/materials\/\u0431\u0443\u0440\u0435\u043d\u0438\u0435_2022.xlsm', header=None)  dict_replace_tpp = {'\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_1\"':\"\u043f_1\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_2\"':\"\u043f_2\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_3\"':\"\u043f_3\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_3\"':\"\u043f_4\"}  replace_type = {'\u0418\u0437 \u043d\u0438\u0445 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445':'\u0413', '\u0418\u0437 \u043d\u0438\u0445 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u043e-\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445':'\u041d\u041d\u0421', '\u0418\u0437 \u0440\u0430\u0437\u0432\u0435\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0431\u0443\u0440\u0435\u043d\u0438\u044f':\"\u0420\"}     df = df[dict_columns.keys()].rename(columns = dict_columns) df['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430'] = pd.to_numeric(df['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430'], errors='coerce') df = df.dropna(subset=['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430','\u043e\u0431\u044a\u0435\u043a\u0442']).reset_index(drop=True) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'], dayfirst=True) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'], dayfirst=True) df['\u0422\u041f\u041f'] = df['\u0422\u041f\u041f'].replace(dict_replace_tpp)  df['\u0442\u0438\u043f'] = df['\u0442\u0438\u043f'].map(replace_type) df['\u0442\u0438\u043f'] = df['\u0442\u0438\u043f'].mask(df['\u043e\u0431\u044a\u0435\u043a\u0442'].str.contains(\"\u0421\u041c\u0414|\u0441\u043c\u0434\"), '\u0421\u041c\u0414') df = df.sort_values(by=['\u0422\u041f\u041f','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435','\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'], ascending=False).reset_index(drop=True)  df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'].dt.date) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'].dt.date)  df = df[df['\u0422\u041f\u041f'] != \"\u043f_3\"].reset_index(drop=True)<\/code><\/pre>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443:<\/p>\n<pre><code class=\"python\">df = pd.read_csv('.\/materials\/\u041e\u0431\u0432\u043e\u0434\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u041b\u0411.csv') (df  .query(...)  .pipe(lambda _df:_df ...)  .assign(**{'\u0434\u0430\u0442\u0430 \u043e\u0442\u0431\u043e\u0440\u0430':...})  ...  .pipe(lambda _df:_df ...) )<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430.<\/p>\n<h2>\u0422\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: pipe, assign \u0438 query.<\/h2>\n<h2>\u041c\u0435\u0442\u043e\u0434 pipe:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.pipe(func, *args, **kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 pipe \u0432 pandas<\/strong> &#8212; \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0427\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041c\u0435\u0442\u043e\u0434 pipe \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433.<\/p>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 pipe \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0443 pipe(). \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434 pipe() \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 pipe:<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2],'col2': [3,4]} >>> df = pd.DataFrame(data=d) >>> df     col1  col2 0     1     3 1     2     4  >>> df.pipe(lambda _df:_df + 1).pipe(lambda _df:_df + 1)     col1  col2 0     3     5 1     4     6<\/code><\/pre>\n<p>\u258d\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 lambda \u0434\u0430\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0440\u0435\u0439\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434 pipe() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 assign:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.assign(**kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 assign \u0432 pandas<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0444\u0440\u0435\u0439\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u0430. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e assign \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0434\u0430\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2],'col2': [3,4]} >>> df = pd.DataFrame(data = d) >>> df     col1  col2 0     1     3 1     2     4  >>> df.assign(col3 = lambda _df:_df['col2']+1)     col1  col2  col3 0     1     3     4 1     2     4     5  # \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 >>> df.assign(col3 = 'pandas')     col1  col2    col3 0     1     3  pandas 1     2     4  pandas  # \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u043e\u0432\u0430\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b >>> df.assign(**{\"col 3\":lambda _df:'pandas'})    col1  col2   col 3 0     1     3  pandas 1     2     4  pandas<\/code><\/pre>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u0435\u0442\u043e\u0434 assign+lambda \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0444\u0440\u0435\u0439\u043c.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 query:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.query(expr, *, inplace=False, **kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 query \u0432 pandas<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0440\u0435\u0439\u043c\u0430. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2,3,4,5,6],          'col2': [7,8,9,10,11,12],          'col3': ['a','b','a','b','a','g'] } >>> df = pd.DataFrame(data = d) >>> df      col1  col2 col3 0     1     7    a 1     2     8    b 2     3     9    a 3     4    10    b 4     5    11    a 5     6    12    g  # \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\/\u043c\u0435\u043d\u044c\u0448\u0435 >>> df.query('col1 &lt; 5')     col1  col2 col3 0     1     7    a 1     2     8    b 2     3     9    a 3     4    10    b  # \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 pandas \u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0443 >>> df.query(\"col3.isin(['a'])\")     col1  col2 col3 0     1     7    a 2     3     9    a 4     5    11    a  # \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e @ \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c >>> filter_b = 'b' >>> df.query(\"col3.isin([@filter_b])\")     col1  col2 col3 1     2     8    b 3     4    10    b<\/code><\/pre>\n<p>\u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a  <strong>&#171;&amp;&#187;, &#171;|&#187; \u0438 &#171;~&#187;<\/strong>, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0442.\u0434. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<h2>\u0420\u0430\u0437\u0431\u043e\u0440 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0435\u0444\u0442\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445.<\/h2>\n<p>\u258d\u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0443\u0436\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445 \u043d\u0430 \u0422\u0438\u0442\u0430\u043d\u0438\u043a\u0435, \u043b\u0435\u043f\u0435\u0441\u0442\u043a\u0438 \u0418\u0440\u0438\u0441\u0430, \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u043e\u0432 \u041f\u0430\u043b\u043c\u0435\u0440\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u043d\u0430\u0439\u0434\u0435\u043c \u0442\u043e\u043f \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u043f\u043e \u0434\u043e\u0431\u044b\u0447\u0435 \u043d\u0435\u0444\u0442\u0438 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u0445.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0442\u0447\u0435\u0442\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0443 \u0441 \u043f\u043b\u0430\u043d\u0430\u043c\u0438 \u043d\u0435\u0444\u0442\u044f\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043d\u0430 2023, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/74e\/24e\/234\/74e24e2340446c4d2fdd29f4061f2c1a.png\" alt=\"\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438 \u0437\u0430\u0443\u0440\u044f\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f.\" title=\"\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438 \u0437\u0430\u0443\u0440\u044f\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f.\" width=\"1233\" height=\"614\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74e\/24e\/234\/74e24e2340446c4d2fdd29f4061f2c1a.png\"\/><\/p>\n<div><figcaption>\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438 \u0437\u0430\u0443\u0440\u044f\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u043e\u043f \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u0431\u044b\u0447\u0435\u0439 \u043d\u0435\u0444\u0442\u0438 (\u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043a\u0430\u043a &#171;\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435&#187;) \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0434\u043e\u0431\u044b\u0447\u0438 (\u043f\u043e \u043c\u0435\u0441\u044f\u0446\u0430\u043c) \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <strong>\u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/strong>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b8b\/4cb\/fb9\/b8b4cbfb9f35bd5626f0058c6729f732.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c.\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c.\" width=\"1344\" height=\"777\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b8b\/4cb\/fb9\/b8b4cbfb9f35bd5626f0058c6729f732.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<pre><code class=\"python\">import pandas as pd # version 1.5.3 import plotly.express as px # version 5.13.0<\/code><\/pre>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u043d\u0430\u0448 excel \u0444\u0430\u0439\u043b \u0438 \u0441\u0440\u0430\u0437\u0443 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e:<\/p>\n<pre><code class=\"python\">df = pd.concat(pd.read_excel('.\/materials\/oil_prod.xlsx',               sheet_name=None,               header=None), ignore_index=True)  df.head(10)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/941\/28c\/72b\/94128c72b3fa39e63fa332f0cf888238.PNG\" width=\"1565\" height=\"704\"\/><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c &#171;\\&#187; \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a chaining \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c df \u0432 \u0441\u043a\u043e\u0431\u043a\u0438:<\/p>\n<pre><code class=\"python\"># \u0441\u043b\u0435\u0448 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442 \u043d\u0435\u0433\u043e, \u043d\u0443\u0436\u043d\u043e df \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0441\u043a\u043e\u0431\u043a\u0438 df \\ .loc[:,:]<\/code><\/pre>\n<pre><code class=\"python\">(df.loc[:,:] ) # \u0438\u043b\u0438 \u043a\u0430\u043a \u043a\u043e\u043c\u0443 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f (     df.loc[:,:] )<\/code><\/pre>\n<p>\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u044b (\u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u043e\u0432\u0430\u0440\u044f) \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u043a\u0432\u0430\u0440\u0442\u0430\u043b\u043e\u0432 \u0438 \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u0430, \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename) )<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4ef\/407\/7a5\/4ef4077a5f9622cc269025b98f91514c.PNG\" width=\"1364\" height=\"553\"\/><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0434\u043e\u0431\u044b\u0447\u0443 \u043d\u0435\u0444\u0442\u0438 \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u043c, \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u043c, \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c.<\/p>\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0438\u0437 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c     # \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e _df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains('\u0422\u041f\u041f|\u0421\u041f')     # \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c True \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0422\u041f\u041f \u0438\u043b\u0438 \u0421\u041f     # df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].where \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f     # \u0438 fillna \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0438\u0437 \u0432\u043d\u0438\u0437     .assign(\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435=lambda _df: (_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains('\u0422\u041f\u041f|\u0421\u041f')                                      .fillna(False)).fillna(method='pad')))     .set_index('\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435')     .reset_index() )<\/code><\/pre>\n<p>\u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 (\u043d\u0430\u043c \u0435\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b) \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 pipe:<\/p>\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}  def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):     _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                             .fillna(False))                                      .fillna(method='pad'))})     _df = _df.set_index(column_name).reset_index()     return _df   (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe     .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')           .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')         .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')  )<\/code><\/pre>\n<p>\u0432\u0441\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u0438 &#8212; \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0442\u0440\u0438 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u043c\u0438, \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/064\/0f6\/61b\/0640f661bc5356e0130f74f1b99ac469.PNG\" width=\"1559\" height=\"734\"\/><\/figure>\n<p>\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e \u0434\u043e\u0431\u044b\u0447\u0435 \u043d\u0435\u0444\u0442\u0438:<\/p>\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}  indicator_filter = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434']  def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):     _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                             .fillna(False))                                      .fillna(method='pad'))})     _df = _df.set_index(column_name).reset_index()     return _df  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe      .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')           .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')         .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 query     .query(\"\u043e\u0431\u044a\u0435\u043a\u0442.fillna('-').str.contains('\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')\")     .query('\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.isin(@indicator_filter)')     .drop(columns = ['\u043e\u0431\u044a\u0435\u043a\u0442','\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']) )<\/code><\/pre>\n<p>\u258d\u0412 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0431\u044b\u043b\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b pd.Series \u0438\u0437 query. \u041d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u043a\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043e.<\/p>\n<p>\u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0444\u043e\u0440\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u043b\u0438\u043d\u043d\u0443\u044e (long) \u0438 \u0443\u0434\u0430\u043b\u0438\u043c \u0441\u043b\u043e\u0432\u043e \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u0427\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e _group_top_n_fields \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u0442\u043e\u043f \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0441\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043c\u0430\u043d\u0435\u0432\u0440\u0430<span class=\"habrahidden\"> (\u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435 \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439, \u0430 \u0434\u0435\u0441\u044f\u0442\u044c)<\/span>:<\/p>\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}  indicator_filter = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434']  def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):     _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                             .fillna(False))                                      .fillna(method='pad'))})     _df = _df.set_index(column_name).reset_index()     return _df   def _group_top_n_fields(_df, n=5):     _df_top_n = _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435', '\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                                as_index=False)['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'].sum()     _df_top_n = (_df_top_n                  .groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435'],                           as_index=True, group_keys=False)                  .apply(lambda df_:df_.nlargest(n=n,columns = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'])))     _df = (_df            .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda df_:df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].where(df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].isin(_df_top_n['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435']))                    .fillna('\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435')))     return _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435',\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\",\"\u043c\u0435\u0441\u044f\u0446\"], as_index=False).sum()  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe      .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')           .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')         .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 query     .query(\"\u043e\u0431\u044a\u0435\u043a\u0442.fillna('-').str.contains('\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')\")     .query('\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.isin(@indicator_filter)')     .drop(columns = ['\u043e\u0431\u044a\u0435\u043a\u0442','\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'])     # \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u043e\u043f 5 \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439     .pipe(lambda _df: pd.melt(frame=_df,                               id_vars=['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                               var_name='\u043c\u0435\u0441\u044f\u0446',                               value_name=\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d\"))     .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda _df:_df['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].replace(' \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435', \"\", regex=True))     .pipe(_group_top_n_fields, n=5) )<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043c\u0435\u0441\u044f\u0446 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u044f\u043d\u0432\u0430\u0440\u044f \u0434\u043e \u0434\u0435\u043a\u0430\u0431\u0440\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>pd.date_range<\/strong> \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 Pandas <strong>ordered=True <\/strong>(\u0442.\u043a. \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u043b\u043e \u043c\u043d\u043e\u0433\u043e, \u0443\u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430):<\/p>\n<details class=\"spoiler\">\n<summary>\u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}   indicator_filter = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434']  def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):     _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                             .fillna(False))                                      .fillna(method='pad'))})     _df = _df.set_index(column_name).reset_index()     return _df  def _group_top_n_fields(_df, n=5):     _df_top_n = _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435', '\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                                as_index=False)['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'].sum()     _df_top_n = (_df_top_n                  .groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435'],                           as_index=True, group_keys=False)                  .apply(lambda df_:df_.nlargest(n=n,columns = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'])))     _df = (_df            .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda df_:df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].where(df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].isin(_df_top_n['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435']))                    .fillna('\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435')))     return _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435',\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\",\"\u043c\u0435\u0441\u044f\u0446\"], as_index=False).sum()  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe      .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')           .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')         .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 query     .query(\"\u043e\u0431\u044a\u0435\u043a\u0442.fillna('-').str.contains('\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')\")     .query('\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.isin(@indicator_filter)')     .drop(columns = ['\u043e\u0431\u044a\u0435\u043a\u0442','\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'])     # \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u043e\u043f 5 \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436.     .pipe(lambda _df: pd.melt(frame=_df,                               id_vars=['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                               var_name='\u043c\u0435\u0441\u044f\u0446',                               value_name=\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d\"))     .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda _df:_df['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].replace(' \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435', \"\", regex=True))     .pipe(_group_top_n_fields, n=5)     # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0442 \u044f\u043d\u0432\u0430\u0440\u044f \u0434\u043e \u0434\u0435\u043a\u0430\u0431\u0440\u044f     .assign(\u043c\u0435\u0441\u044f\u0446=lambda _df: pd.Categorical(values=_df['\u043c\u0435\u0441\u044f\u0446'].str.lower(),                                              categories=pd.date_range(start='01.01.2023',                                                                   end='12.01.2023',                                                                   freq='MS').month_name(locale='Ru').str.lower(),                                              ordered=True))     .sort_values(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435','\u043c\u0435\u0441\u044f\u0446'])     .reset_index(drop=True) )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d94\/d9b\/ec3\/d94d9bec3ab2c49deb193ecd8f8e654a.png\" width=\"649\" height=\"408\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d94\/d9b\/ec3\/d94d9bec3ab2c49deb193ecd8f8e654a.png\"\/><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435 (\u044f\u043d\u0432\u0430\u0440\u044c &#8212; 31, \u0444\u0435\u0432\u0440\u0430\u043b\u044c &#8212; 28, \u0430\u043f\u0440\u0435\u043b\u044c &#8212; 30), \u043d\u0430\u0439\u0434\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0443\u0442\u043e\u0447\u043d\u0443\u044e \u0434\u043e\u0431\u044b\u0447\u0443 \u043d\u0435\u0444\u0442\u0438 (\u0434\u043e\u0431\u044b\u0447\u0443 \u043d\u0435\u0444\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435). \u041a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0447\u0435\u0440\u0435\u0437 <strong>pd.Series.map({})<\/strong> \u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u043a\u043e\u0434, \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<pre><code class=\"python\">map_days_in_month = {i.month_name(locale='Ru').lower():i.daysinmonth                      for i in pd.date_range(start='01.01.2023',                                             end='12.01.2023',freq='MS')}  >>> {'\u044f\u043d\u0432\u0430\u0440\u044c': 31,  '\u0444\u0435\u0432\u0440\u0430\u043b\u044c': 28,  '\u043c\u0430\u0440\u0442': 31,  '\u0430\u043f\u0440\u0435\u043b\u044c': 30,  '\u043c\u0430\u0439': 31,  '\u0438\u044e\u043d\u044c': 30,  '\u0438\u044e\u043b\u044c': 31,  '\u0430\u0432\u0433\u0443\u0441\u0442': 31,  '\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c': 30,  '\u043e\u043a\u0442\u044f\u0431\u0440\u044c': 31,  '\u043d\u043e\u044f\u0431\u0440\u044c': 30,  '\u0434\u0435\u043a\u0430\u0431\u0440\u044c': 31}<\/code><\/pre>\n<p>\u258d\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0432 pandas \u0443\u0436\u0435 \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u044b \u0438\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 <strong>month_name(locale=&#8217;Ru&#8217;)<\/strong> \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u043e\u0442\u0442\u0443\u0434\u0430 \u0437\u0430\u0431\u0440\u0430\u0442\u044c.<\/p>\n<p>\u0412\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}   map_days_in_month = {i.month_name(locale='Ru').lower():i.daysinmonth for i in pd.date_range(start='01.01.2023',                                                                                             end='12.01.2023',freq='MS')}  indicator_filter = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434']  def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):     _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                      .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                             .fillna(False))                                      .fillna(method='pad'))})     _df = _df.set_index(column_name).reset_index()     return _df     def _group_top_n_fields(_df, n=5):     _df_top_n = _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435', '\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                                as_index=False)['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'].sum()     _df_top_n = (_df_top_n                  .groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435'],                           as_index=True, group_keys=False)                  .apply(lambda df_:df_.nlargest(n=n,columns = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'])))     _df = (_df            .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda df_:df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].where(df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].isin(_df_top_n['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435']))                    .fillna('\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435')))     return _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435',\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\",\"\u043c\u0435\u0441\u044f\u0446\"], as_index=False).sum()  (     df     .loc[:,columns_rename.keys()]     .rename(columns=columns_rename)     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe     .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')           .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')         .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')     # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 query     .query(\"\u043e\u0431\u044a\u0435\u043a\u0442.fillna('-').str.contains('\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')\")     .query('\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.isin(@indicator_filter)')     .drop(columns = ['\u043e\u0431\u044a\u0435\u043a\u0442','\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'])     # \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u043e\u043f 5 \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436.     .pipe(lambda _df: pd.melt(frame=_df,                               id_vars=['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                               var_name='\u043c\u0435\u0441\u044f\u0446',                               value_name=\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d\"))     .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda _df:_df['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].replace(' \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435', \"\", regex=True))     .pipe(_group_top_n_fields, n=5)     # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0442 \u044f\u043d\u0432\u0430\u0440\u044f \u0434\u043e \u0434\u0435\u043a\u0430\u0431\u0440\u044f     .assign(\u043c\u0435\u0441\u044f\u0446=lambda _df: pd.Categorical(values=_df['\u043c\u0435\u0441\u044f\u0446'].str.lower(),                                              categories=pd.date_range(start='01.01.2023',                                                                   end='12.01.2023',                                                                   freq='MS').month_name(locale='Ru').str.lower(),                                              ordered=True))     .sort_values(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435','\u043c\u0435\u0441\u044f\u0446'])     .reset_index(drop=True)     # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u044b `\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435` \u0438 `\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442`     .assign(**{'\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435':lambda _df:_df['\u043c\u0435\u0441\u044f\u0446'].map(map_days_in_month)})     .assign(**{\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442\":lambda _df:(_df['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d']\/_df['\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435']).round(1)}) )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e69\/18f\/720\/e6918f720219b532169d01b9f8b742d9.PNG\" width=\"1058\" height=\"487\"\/><\/figure>\n<p>\u0412\u0441\u0435, \u043d\u0430\u0448\u0430 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0430! \u0422\u0435\u043f\u0435\u0440\u044c, \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043b\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u043b\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u0442\u043e \u043a\u0430\u043a \u043b\u044e\u0431\u0438\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u0434 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def processing_oil_table(path):          df_ = pd.concat(pd.read_excel(path,               sheet_name=None,               header=None), ignore_index=True)          columns_rename = {1:\"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\",5:'\u044f\u043d\u0432\u0430\u0440\u044c',7:'\u0444\u0435\u0432\u0440\u0430\u043b\u044c',9:'\u043c\u0430\u0440\u0442',                   13:\"\u0430\u043f\u0440\u0435\u043b\u044c\",15:\"\u043c\u0430\u0439\",17:\"\u0438\u044e\u043d\u044c\",21:\"\u0438\u044e\u043b\u044c\",                   23:\"\u0430\u0432\u0433\u0443\u0441\u0442\",25:\"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c\",29:\"\u043e\u043a\u0442\u044f\u0431\u0440\u044c\",                   31:\"\u043d\u043e\u044f\u0431\u0440\u044c\",33:\"\u0434\u0435\u043a\u0430\u0431\u0440\u044c\"}     map_days_in_month = {i.month_name(locale='Ru').lower():i.daysinmonth for i in pd.date_range(start='01.01.2023',                                                                                             end='12.01.2023',freq='MS')}     indicator_filter = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434']      def _pipe_column_filter(_df, column_name, text_filter='\u0422\u041f\u041f|\u0421\u041f'):         _df = _df.assign(**{column_name:(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c']                                          .where(_df['\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'].str.contains(text_filter)                                                 .fillna(False))                                          .fillna(method='pad'))})         _df = _df.set_index(column_name).reset_index()         return _df          def _group_top_n_fields(_df, n=5):         _df_top_n = _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435', '\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                                    as_index=False)['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'].sum()         _df_top_n = (_df_top_n                      .groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435'],                               as_index=True, group_keys=False)                      .apply(lambda df_:df_.nlargest(n=n,columns = ['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d'])))         _df = (_df                .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda df_:df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].where(df_['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].isin(_df_top_n['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435']))                        .fillna('\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435')))         return _df.groupby(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435',\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\",\"\u043c\u0435\u0441\u044f\u0446\"], as_index=False).sum()     return (df_             .loc[:,columns_rename.keys()]             .rename(columns=columns_rename)             # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 pipe             .pipe(_pipe_column_filter, column_name=\"\u043e\u0431\u044a\u0435\u043a\u0442\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435|[\u041e\u043e]\u0431\u044a\u0435\u043a\u0442')                   .pipe(_pipe_column_filter, column_name=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f|\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')                 .pipe(_pipe_column_filter, column_name=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\", text_filter='\u0422\u041f\u041f|\u0421\u041f')             # \u0431\u043b\u043e\u043a \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430 query             .query(\"\u043e\u0431\u044a\u0435\u043a\u0442.fillna('-').str.contains('\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435')\")             .query('\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.isin(@indicator_filter)')             .drop(columns = ['\u043e\u0431\u044a\u0435\u043a\u0442','\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c'])             # \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u043e\u043f 5 \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436.             .pipe(lambda _df: pd.melt(frame=_df,                                       id_vars=['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'],                                       var_name='\u043c\u0435\u0441\u044f\u0446',                                       value_name=\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d\"))             .assign(\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435=lambda _df:_df['\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435'].replace(' \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435', \"\", regex=True))             .pipe(_group_top_n_fields, n=5)             # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0442 \u044f\u043d\u0432\u0430\u0440\u044f \u0434\u043e \u0434\u0435\u043a\u0430\u0431\u0440\u044f             .assign(\u043c\u0435\u0441\u044f\u0446=lambda _df: pd.Categorical(values=_df['\u043c\u0435\u0441\u044f\u0446'].str.lower(),                                                      categories=pd.date_range(start='01.01.2023',                                                                           end='12.01.2023',                                                                           freq='MS').month_name(locale='Ru').str.lower(),                                                      ordered=True))             .sort_values(['\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435','\u043c\u0435\u0441\u044f\u0446'])             .reset_index(drop=True)             # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u044b `\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435` \u0438 `\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442`             .assign(**{'\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435':lambda _df:_df['\u043c\u0435\u0441\u044f\u0446'].map(map_days_in_month)})             .assign(**{\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442\":lambda _df:(_df['\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d']\/_df['\u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435']).round(1)})            )  >>> processing_oil_table(path='.\/materials\/oil_prod.xlsx')               \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435    \u043c\u0435\u0441\u044f\u0446  \u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438, \u0442\u044b\u0441. \u0442\u043e\u043d\u043d  \\ 0  \u0421\u041f \"\u0421\u043c\u043e\u043b\u0435\u043d\u0441\u043a\u043d\u0435\u0444\u0442\u0435\u0433\u0430\u0437\"    LTMJQUJERT   \u044f\u043d\u0432\u0430\u0440\u044c                    0.455    1  \u0421\u041f \"\u0421\u043c\u043e\u043b\u0435\u043d\u0441\u043a\u043d\u0435\u0444\u0442\u0435\u0433\u0430\u0437\"    LTMJQUJERT  \u0444\u0435\u0432\u0440\u0430\u043b\u044c                    0.401    2  \u0421\u041f \"\u0421\u043c\u043e\u043b\u0435\u043d\u0441\u043a\u043d\u0435\u0444\u0442\u0435\u0433\u0430\u0437\"    LTMJQUJERT     \u043c\u0430\u0440\u0442                    0.433    3  \u0421\u041f \"\u0421\u043c\u043e\u043b\u0435\u043d\u0441\u043a\u043d\u0435\u0444\u0442\u0435\u0433\u0430\u0437\"    LTMJQUJERT   \u0430\u043f\u0440\u0435\u043b\u044c                    0.408    4  \u0421\u041f \"\u0421\u043c\u043e\u043b\u0435\u043d\u0441\u043a\u043d\u0435\u0444\u0442\u0435\u0433\u0430\u0437\"    LTMJQUJERT      \u043c\u0430\u0439                    0.411        \u043a\u043e\u043b-\u0432\u043e \u0434\u043d\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446\u0435  \u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442   0                    31                        0.0   1                    28                        0.0   2                    31                        0.0   3                    30                        0.0   4                    31                        0.0  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0420\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/h2>\n<p>\u0414\u043b\u044f \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Area plot(\u0438\u043b\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438), \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e pipe, \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c method chaining:<\/p>\n<pre><code class=\"python\">df_oil = processing_oil_table(path='.\/materials\/oil_prod.xlsx') (     df_oil     .pipe(lambda _df:px.area(_df, x=\"\u043c\u0435\u0441\u044f\u0446\",                              y=\"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442\",                              color=\"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\",                              facet_col=\"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\",                                                           facet_col_wrap=2,                              facet_col_spacing=0.05)) )<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ab7\/663\/b53\/ab7663b53aac3f155057f1fb6178f365.png\" width=\"1000\" height=\"650\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ab7\/663\/b53\/ab7663b53aac3f155057f1fb6178f365.png\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0443\u044e \u0434\u043e\u0431\u044b\u0447\u0443 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044e(\u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c) \u0438 \u0443\u0431\u0435\u0440\u0435\u043c &#171;\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435=&#187; \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e lambda, \u043d\u043e \u044f \u0432\u044b\u0434\u0435\u043b\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c:<\/p>\n<pre><code class=\"python\">def _plot_area(_df, add_sum_venture=False, path_save=None):     # \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432     x_month = \"\u043c\u0435\u0441\u044f\u0446\"     y_oil_prod = \"\u0434\u043e\u0431\u044b\u0447\u0430 \u043d\u0435\u0444\u0442\u0438 \u0442\u044b\u0441.\u0442\u043e\u043d\u043d\/\u0441\u0443\u0442\"     facet_col = \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435\"     facet_col_wrap = 2     color = \"\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435\"     # \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f\u043c     fig = px.area(_df,                   x=x_month,                   y=y_oil_prod,                   color=color,                   facet_col_wrap=facet_col_wrap,                   facet_col=facet_col,                   facet_col_spacing=0.05)     # \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u044f\u043c     if add_sum_venture:         fig.add_traces(px.line(_df.groupby([facet_col, x_month],as_index=False).sum(numeric_only=True).round(2),                                x=x_month,                                y=y_oil_prod,                                facet_col=facet_col,                                facet_col_wrap=2,                                text=y_oil_prod).data)          (fig          .update_traces(textposition='top center')          .update_yaxes(range = [0,6]))     # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435=\"      fig.for_each_annotation(lambda a: a.update(text=a.text.split(\"=\")[-1]))     # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a, \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c     if path_save:         fig.write_image(file=path_save,width=1_000,height=650)          return fig  (     df_oil     .pipe(_plot_area, add_sum_venture=True) )<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/362\/b40\/8ea\/362b408ea22226661a5865c61237150f.png\" alt=\"\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\" title=\"\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\" width=\"1000\" height=\"650\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/362\/b40\/8ea\/362b408ea22226661a5865c61237150f.png\"\/><\/p>\n<div><figcaption>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0448\u0430\u043c\u0430\u043d\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u043a\u0440\u0430\u0441\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 \u0442.\u0434. \u0438 \u0442.\u043f.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u0412\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c &#171;\u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434&#187; \u0438 \u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 chaining \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041c\u043e\u0436\u0435\u0442 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434? \u0418\u043b\u0438 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0430\u0439\u0434\u044b?<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/722170\/\"> https:\/\/habr.com\/ru\/post\/722170\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u0430\u044f \u043f\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u0438\u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432,<\/strong> <strong>method chaining)<\/strong> &#8212; \u044d\u0442\u043e \u0441\u0442\u0438\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u044f \u0432\u0440\u0435\u043c\u044f \u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u044e.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439, \u044d\u0442\u043e, \u043f\u043e \u0441\u0443\u0442\u0438, \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e pandas \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0437\u0430 \u0440\u0430\u0437. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u0442\u0440\u0443\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043a\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <span class=\"habrahidden\">\u0423 \u043c\u0435\u043d\u044f \u0435\u0449\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430, \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e, \u0432\u043e\u0442 \u0442\u043e\u0433\u0434\u0430 \u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u044b \u0434\u0435\u043b\u0430\u043b \u0438 \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043d\u043e\u0432\u043e.<\/span><\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u042d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0435\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0443.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/li>\n<li>\n<p>\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. <strong>\u0422\u0432\u043e\u0439 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u042f \u0441\u043a\u0430\u0436\u0435\u0442 \u0442\u0435\u0431\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e!<\/strong><\/p>\n<\/li>\n<li>\n<p>\u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0431\u043e\u043b\u0435\u0439 \u043f\u0440\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b SettingWithCopyWarning, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0444\u0440\u0435\u0439\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430, \u0447\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0433\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 pandas.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u0442 <strong>Matt Harrison<\/strong> <span class=\"habrahidden\">(\u0433\u0443\u0433\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u00a0Idiomatic Pandas, Effective Pandas: Patterns for Data Manipulation, \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 PyData)<\/span>. \u0422\u0430\u043a \u0436\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c cheetsheet pandas, \u043d\u043e \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u0438 \u0432 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u043c \u043b\u0435\u0432\u043e\u043c \u0443\u0433\u043b\u0443, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0423\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 Method Chaining \u0432 CheetSheet \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 pandas.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0443:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0438\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c &#8212; \u0445\u043e\u0442\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043d\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0435\u0441\u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u043c\u0430\u043b\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u0440\u043e\u043b\u043e\u0433: \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u041e\u041e\u041f<\/h2>\n<p><strong>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432,<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<ul>\n<li>\n<p>\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0435\u0441\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 Cat:<\/p>\n<pre><code class=\"python\">class Cat:     def __init__(self, name=None, breed=None):         self.name = name         self.breed = breed      def set_name(self, name):         self.name = name      def set_breed(self, breed):         self.breed = breed      def __repr__(self, ):         class_name = type(self).__name__         attr = ', '.join([f'{i}={v!r}' for i, v in self.__dict__.items()])         return f\"{class_name}({attr})\"<\/code><\/pre>\n<p>\u0422.\u043a. \u043c\u0435\u0442\u043e\u0434\u044b \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441 (self), \u0442\u043e \u043c\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0438\u0447\u043a\u0443 \u0438 \u043f\u043e\u0440\u043e\u0434\u0443:<\/p>\n<pre><code class=\"python\">djon_the_cat = Cat()  djon_the_cat.set_name('Djon') djon_the_cat.set_breed('Siamse') >>> Cat(name='Djon', breed='siamse')<\/code><\/pre>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c  return self  \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u043e \u0443\u0436\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0442\u0430 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443:<\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c self<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class Cat:     def __init__(self,name=None,breed=None):         self.name=name         self.breed=breed          def set_name(self,name):         self.name=name         #\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c return self         return self              def set_breed(self,breed):         self.breed=breed           #\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c return self         return self          def __repr__(self,):         class_name=type(self).__name__         attr=', '.join([f'{i}={v!r}' for i,v in self.__dict__.items()])         return f\"{class_name}({attr})\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code class=\"python\">djon_the_cat = Cat().set_name('Djon').set_breed('Siamse') >>> Cat(name='Djon', breed='siamse')<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0438 \u0432 pandas, \u043d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c \u0443\u0439\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"python\">df = pd.read_excel('.\/materials\/\u0431\u0443\u0440\u0435\u043d\u0438\u0435_2022.xlsm', header=None)  dict_replace_tpp = {'\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_1\"':\"\u043f_1\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_2\"':\"\u043f_2\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_3\"':\"\u043f_3\",                     '\u0421\u041f \"\u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435_3\"':\"\u043f_4\"}  replace_type = {'\u0418\u0437 \u043d\u0438\u0445 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445':'\u0413', '\u0418\u0437 \u043d\u0438\u0445 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u043e-\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445':'\u041d\u041d\u0421', '\u0418\u0437 \u0440\u0430\u0437\u0432\u0435\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0431\u0443\u0440\u0435\u043d\u0438\u044f':\"\u0420\"}     df = df[dict_columns.keys()].rename(columns = dict_columns) df['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430'] = pd.to_numeric(df['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430'], errors='coerce') df = df.dropna(subset=['\u0438\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u044b\u0447\u0430','\u043e\u0431\u044a\u0435\u043a\u0442']).reset_index(drop=True) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'], dayfirst=True) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'], dayfirst=True) df['\u0422\u041f\u041f'] = df['\u0422\u041f\u041f'].replace(dict_replace_tpp)  df['\u0442\u0438\u043f'] = df['\u0442\u0438\u043f'].map(replace_type) df['\u0442\u0438\u043f'] = df['\u0442\u0438\u043f'].mask(df['\u043e\u0431\u044a\u0435\u043a\u0442'].str.contains(\"\u0421\u041c\u0414|\u0441\u043c\u0434\"), '\u0421\u041c\u0414') df = df.sort_values(by=['\u0422\u041f\u041f','\u043c\u0435\u0441\u0442\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435','\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'], ascending=False).reset_index(drop=True)  df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d'].dt.date) df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'] = pd.to_datetime(df['\u0434\u0430\u0442\u0430 \u0432\u0432\u043e\u0434\u0430 \u0444\u0430\u043a\u0442'].dt.date)  df = df[df['\u0422\u041f\u041f'] != \"\u043f_3\"].reset_index(drop=True)<\/code><\/pre>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443:<\/p>\n<pre><code class=\"python\">df = pd.read_csv('.\/materials\/\u041e\u0431\u0432\u043e\u0434\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u041b\u0411.csv') (df  .query(...)  .pipe(lambda _df:_df ...)  .assign(**{'\u0434\u0430\u0442\u0430 \u043e\u0442\u0431\u043e\u0440\u0430':...})  ...  .pipe(lambda _df:_df ...) )<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430.<\/p>\n<h2>\u0422\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430: pipe, assign \u0438 query.<\/h2>\n<h2>\u041c\u0435\u0442\u043e\u0434 pipe:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.pipe(func, *args, **kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 pipe \u0432 pandas<\/strong> &#8212; \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0427\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041c\u0435\u0442\u043e\u0434 pipe \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u0430\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433.<\/p>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 pipe \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442. \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0443 pipe(). \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434 pipe() \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 pipe:<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2],'col2': [3,4]} >>> df = pd.DataFrame(data=d) >>> df     col1  col2 0     1     3 1     2     4  >>> df.pipe(lambda _df:_df + 1).pipe(lambda _df:_df + 1)     col1  col2 0     3     5 1     4     6<\/code><\/pre>\n<p>\u258d\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 lambda \u0434\u0430\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0440\u0435\u0439\u043c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434 pipe() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0440\u0435\u0439\u043c, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 assign:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.assign(**kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 assign \u0432 pandas<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0444\u0440\u0435\u0439\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u0430. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e assign \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0434\u0430\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2],'col2': [3,4]} >>> df = pd.DataFrame(data = d) >>> df     col1  col2 0     1     3 1     2     4  >>> df.assign(col3 = lambda _df:_df['col2']+1)     col1  col2  col3 0     1     3     4 1     2     4     5  # \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 >>> df.assign(col3 = 'pandas')     col1  col2    col3 0     1     3  pandas 1     2     4  pandas  # \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u043e\u0432\u0430\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b >>> df.assign(**{\"col 3\":lambda _df:'pandas'})    col1  col2   col 3 0     1     3  pandas 1     2     4  pandas<\/code><\/pre>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u0435\u0442\u043e\u0434 assign+lambda \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0444\u0440\u0435\u0439\u043c.<\/p>\n<h2>\u041c\u0435\u0442\u043e\u0434 query:<\/h2>\n<pre><code class=\"python\">pandas.DataFrame.query(expr, *, inplace=False, **kwargs)<\/code><\/pre>\n<p><strong>\u041c\u0435\u0442\u043e\u0434 query \u0432 pandas<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0440\u0435\u0439\u043c\u0430. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u0444\u0440\u0435\u0439\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"python\">>>> d = {'col1': [1,2,3,4,5,6],          'col2': [7,8,9,10,11,12],          'col3': ['a','b','a','b','a','g'] } >>> df = pd.DataFrame(data = d) >>> df      col1  col2 col3 0     1     7    a 1     2     8    b 2     3     9    a 3     4    10    b 4     5    11    a 5     6    12    g  # \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\/\u043c\u0435\u043d\u044c\u0448\u0435 >>> df.query('col1 &lt; 5')     col1  col2 col3 0     1     7    a 1     2     8    b 2     3     9    a 3     4    10    b  # \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 pandas \u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0443 >>> df.query(\"col3.isin(['a'])\")     col1  col2 col3 0     1     7    a 2     3     9    a 4     5    11    a  # \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e @ \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c >>> filter_b = 'b' >>> df.query(\"col3.isin([@filter_b])\")     col1  col2 col3 1     2     8    b 3     4    10    b<\/code><\/pre>\n<p>\u0414\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a  <strong>&#171;&amp;&#187;, &#171;|&#187; \u0438 &#171;~&#187;<\/strong>, \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-346682","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=346682"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346682\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}