Skip to content

🐼 LeetCode: 30 Days of Pandas Study Plan ​

📁 1. Data Filtering (Фильтрация данных) ​

595. Big Countries - Крупные страны ​

Легкий Темы значок премиум-замка Компании Схема SQL Схема Pandas Стол:World

+-------------+---------+ | Название столбца | Тип | +-------------+---------+ | имя | varchar | | континент | варчар | | область | инт | | население | инт | | ВВП | бигинт | +-------------+---------+ Имя является первичным ключом (столбцом с уникальными значениями) для этой таблицы. Каждая строка этой таблицы содержит информацию о названии страны, континенте, к которому она принадлежит, ее площади, населении и показателе ВВП.

Страна считается большой, если:

его площадь составляет не менее трех миллионов (т.е. ), или3000000 km2 В нем проживает не менее двадцати пяти миллионов человек (т.е. 25000000). Напишите решение для нахождения названия, численности населения и площади крупных стран .

Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Мировая таблица: +-------------+-----------+---------+-------------+---------------+ | название | континент | площадь | население | ВВП | +-------------+-----------+---------+-------------+---------------+ | Афганистан | Азия | 652230 | 25500100 | 20343000000 | | Албания | Европа | 28748 | 2831741 | 12960000000 | | Алжир | Африка | 2381741 | 37100000 | 188681000000 | | Андорра | Европа | 468 | 78115 | 3712000000 | | Ангола | Африка | 1246700 | 20609294 | 100990000000 | +-------------+-----------+---------+-------------+---------------+ Выход: +-------------+------------+---------+ | название | население | территория | +-------------+------------+---------+ | Афганистан | 25500100 | 652230 | | Алжир | 37100000 | 2381741 | +-------------+------------+---------+

import pandas as pd

data = [['Afghanistan', 'Asia', 652230, 25500100, 20343000000], ['Albania', 'Europe', 28748, 2831741, 12960000000], ['Algeria', 'Africa', 2381741, 37100000, 188681000000], ['Andorra', 'Europe', 468, 78115, 3712000000], ['Angola', 'Africa', 1246700, 20609294, 100990000000]] world = pd.DataFrame(data, columns=['name', 'continent', 'area', 'population', 'gdp']).astype({'name':'object', 'continent':'object', 'area':'Int64', 'population':'Int64', 'gdp':'Int64'})

def big_countries(world: pd.DataFrame) -> pd.DataFrame:

1757. Recyclable and Low Fat Products - Продукты, пригодные для вторичной переработки и с низким содержанием жира. ​

Легкий Темы значок премиум-замка Компании Схема SQL Схема Pandas Стол:Products

+-------------+---------+ | Название столбца | Тип | +-------------+---------+ | product_id | int | | low_fats | enum | | пригодный для вторичной переработки | перечисление | +-------------+---------+ product_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. low_fats — это перечисление (категория) типа ('Y', 'N'), где 'Y' означает, что данный продукт содержит мало жира, а 'N' — что это не так. Перерабатываемый — это перечисление (категория) типов ('Y', 'N'), где 'Y' означает, что данный продукт подлежит переработке, а 'N' — что нет.

Напишите решение для поиска идентификаторов продуктов, которые одновременно являются низкокалорийными и пригодными для вторичной переработки.

Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица товаров: +-------------+----------+------------+ | идентификатор продукта | низкое содержание жира | пригоден для вторичной переработки | +-------------+----------+------------+ | 0 | Y | N | | 1 | Y | Y | | 2 | Н | Я | | 3 | Y | Y | | 4 | Н | Н | +-------------+----------+------------+ Выход: +-------------+ | product_id | +-------------+ | 1 | | 3 | +-------------+ Пояснение: Только продукты 1 и 3 содержат мало жира и подлежат переработке.

import pandas as pd

data = [['0', 'Y', 'N'], ['1', 'Y', 'Y'], ['2', 'N', 'Y'], ['3', 'Y', 'Y'], ['4', 'N', 'N']] products = pd.DataFrame(data, columns=['product_id', 'low_fats', 'recyclable']).astype({'product_id':'int64', 'low_fats':'category', 'recyclable':'category'})

def find_products(products: pd.DataFrame) -> pd.DataFrame:

183. Customers Who Never Order - Клиенты, которые никогда не делают заказов ​

Легкий Темы Схема SQL Схема Pandas Стол:Customers

+-------------+---------+ | Название столбца | Тип | +-------------+---------+ | id | int | | имя | varchar | +-------------+---------+ id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. Каждая строка этой таблицы содержит идентификатор и имя клиента.

Стол:Orders

+-------------+------+ | Название столбца | Тип | +-------------+------+ | id | int | | customerId | int | +-------------+------+ id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. customerId является внешним ключом (ссылочным столбцом) идентификатора из таблицы Customers. Каждая строка этой таблицы содержит идентификатор заказа и идентификатор клиента, оформившего заказ.

Напишите решение для поиска всех клиентов, которые никогда ничего не заказывают.

Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица клиентов: +----+-------+ | id | name | +----+-------+ | 1 | Джо | | 2 | Генри | | 3 | Сэм | | 4 | Макс | +----+-------+ Таблица заказов: +----+------------+ | id | customerId | +----+------------+ | 1 | 3 | | 2 | 1 | +----+------------+ Выход: +-----------+ | Клиенты | +-----------+ | Генри | | Макс | +-----------+

import pandas as pd

data = [[1, 'Joe'], [2, 'Henry'], [3, 'Sam'], [4, 'Max']] customers = pd.DataFrame(data, columns=['id', 'name']).astype({'id':'Int64', 'name':'object'}) data = [[1, 3], [2, 1]] orders = pd.DataFrame(data, columns=['id', 'customerId']).astype({'id':'Int64', 'customerId':'Int64'})

def find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:

1148. Article Views I - Просмотров статьи I ​

Легкий Темы Схема SQL Схема Pandas Стол:Views

+---------------+---------+ | Название столбца | Тип | +---------------+---------+ | article_id | int | | author_id | int | | viewer_id | int | | дата просмотра | дата | +---------------+---------+ В этой таблице отсутствует первичный ключ (столбец с уникальными значениями), поэтому в таблице могут быть повторяющиеся строки. Каждая строка этой таблицы указывает на то, что какой-либо пользователь просмотрел статью (написанную каким-либо автором) в определенную дату. Обратите внимание, что совпадение author_id и viewer_id указывает на одного и того же человека.

Напишите решение для поиска всех авторов, которые просмотрели хотя бы одну из своих статей.

Возвращает результирующую таблицу, отсортированную idв порядке возрастания.

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица представлений: +------------+-----------+-----------+------------+ | article_id | author_id | viewer_id | view_date | +------------+-----------+-----------+------------+ | 1 | 3 | 5 | 01.08.2019 | | 1 | 3 | 6 | 2019-08-02 | | 2 | 7 | 7 | 2019-08-01 | | 2 | 7 | 6 | 2019-08-02 | | 4 | 7 | 1 | 2019-07-22 | | 3 | 4 | 4 | 21.07.2019 | | 3 | 4 | 4 | 21.07.2019 | +------------+-----------+-----------+------------+ Выход: +------+ | id | +------+ | 4 | | 7 | +------+

import pandas as pd

data = [[1, 3, 5, '2019-08-01'], [1, 3, 6, '2019-08-02'], [2, 7, 7, '2019-08-01'], [2, 7, 6, '2019-08-02'], [4, 7, 1, '2019-07-22'], [3, 4, 4, '2019-07-21'], [3, 4, 4, '2019-07-21']] views = pd.DataFrame(data, columns=['article_id', 'author_id', 'viewer_id', 'view_date']).astype({'article_id':'Int64', 'author_id':'Int64', 'viewer_id':'Int64', 'view_date':'datetime64[ns]'})

def article_views(views: pd.DataFrame) -> pd.DataFrame:

🔤 2. String Methods (Методы строк) ​

1683. Invalid Tweets - Недействительные твиты ​

Легкий Темы Схема SQL Схема Pandas Стол:Tweets

+----------------+---------+ | Название столбца | Тип | +----------------+---------+ | tweet_id | int | | контент | varchar | +----------------+---------+ tweet_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. Содержимое состоит из буквенно-цифровых символов, символа '!' или ' ' и не содержит других специальных символов. В этой таблице представлены все твиты из приложения социальной сети.

Напишите решение для поиска идентификаторов недействительных твитов. Твит считается недействительным, если количество символов в его содержимом строго превышает 15.

Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица твитов: +----------+-----------------------------------+ | tweet_id | content | +----------+-----------------------------------+ | 1 | Давайте программировать | | 2 | Здесь более пятнадцати символов! | +----------+-----------------------------------+ Выход: +----------+ | tweet_id | +----------+ | 2 | +----------+ Объяснение: Длина первого твита равна 11. Это допустимый твит. Длина второго твита равна 33. Это недействительный твит.

import pandas as pd

data = [[1, 'Let us Code'], [2, 'More than fifteen chars are here!']] tweets = pd.DataFrame(data, columns=['tweet_id', 'content']).astype({'tweet_id':'Int64', 'content':'object'})

def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:

1873. Calculate Special Bonus - Рассчитайте специальную премию. ​

Легкий Темы Схема SQL Схема Pandas Стол:Employees

+-------------+---------+ | Название столбца | Тип | +-------------+---------+ | employee_id | int | | имя | varchar | | зарплата | инт | +-------------+---------+ employee_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. В каждой строке этой таблицы указаны идентификационный номер сотрудника, имя сотрудника и заработная плата.

Напишите решение для расчета бонуса каждого сотрудника. Бонус сотрудника рассчитывается 100%как часть его заработной платы, если идентификатор сотрудника имеет нечетное число и имя сотрудника не начинается с символа'M' . В противном случае бонус рассчитывается 0как .

Возвращает таблицу результатов, отсортированную по employee_id.

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица сотрудников: +-------------+---------+--------+ | идентификатор сотрудника | имя | зарплата | +-------------+---------+--------+ | 2 | Мейр | 3000 | | 3 | Майкл | 3800 | | 7 | Аддилин | 7400 | | 8 | Хуан | 6100 | | 9 | Кэннон | 7700 | +-------------+---------+--------+ Выход: +-------------+-------+ | идентификатор сотрудника | бонус | +-------------+-------+ | 2 | 0 | | 3 | 0 | | 7 | 7400 | | 8 | 0 | | 9 | 7700 | +-------------+-------+ Объяснение: Сотрудники с ID 2 и 8 не получают бонуса, потому что у них четный employee_id. Сотрудник с ID 3 не получает бонуса, потому что его имя начинается с буквы «М». Остальные сотрудники получают 100% бонус.

import pandas as pd

data = [[2, 'Meir', 3000], [3, 'Michael', 3800], [7, 'Addilyn', 7400], [8, 'Juan', 6100], [9, 'Kannon', 7700]] employees = pd.DataFrame(data, columns=['employee_id', 'name', 'salary']).astype({'employee_id':'int64', 'name':'object', 'salary':'int64'})

def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:

1667. Fix Names in a Table - Зафиксируйте имена в таблице. ​

Легкий Темы Схема SQL Схема Pandas Стол:Users

+----------------+---------+ | Название столбца | Тип | +----------------+---------+ | user_id | int | | имя | varchar | +----------------+---------+ user_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. В этой таблице указаны идентификатор и имя пользователя. Имя состоит только из строчных и заглавных букв.

Напишите решение для исправления имен таким образом, чтобы только первый символ был заглавным, а остальные — строчными.

Возвращает таблицу результатов, отсортированную по user_id.

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица пользователей: +---------+-------+ | user_id | name | +---------+-------+ | 1 | Алиса | | 2 | bOB | +---------+-------+ Выход: +---------+-------+ | user_id | name | +---------+-------+ | 1 | Алиса | | 2 | Боб | +---------+-------+

import pandas as pd

data = [[1, 'aLice'], [2, 'bOB']] users = pd.DataFrame(data, columns=['user_id', 'name']).astype({'user_id':'Int64', 'name':'object'})

def fix_names(users: pd.DataFrame) -> pd.DataFrame:

1517. Find Users With Valid E-Mails - Найти пользователей с действительными адресами электронной почты. ​

Легкий Темы Схема SQL Схема Pandas Стол:Users

+---------------+---------+ | Название столбца | Тип | +---------------+---------+ | user_id | int | | имя | varchar | | почта | варчар | +---------------+---------+ user_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. В этой таблице представлена ​​информация о пользователях, зарегистрированных на веб-сайте. Некоторые адреса электронной почты недействительны.

Напишите решение для поиска пользователей, у которых есть действительные адреса электронной почты .

Действительный адрес электронной почты имеет префикс и домен, в котором:

Имя префикса представляет собой строку, которая может содержать буквы (прописные или строчные), цифры, символ подчеркивания '_', точку '.'и/или дефис '-'. Имя префикса должно начинаться с буквы. Домен должен быть написан строго '@leetcode.com'строчными буквами. Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Таблица пользователей: +---------+-----------+-------------------------+ | идентификатор пользователя | имя | почта | +---------+-----------+-------------------------+ | 1 | Уинстон | winston@leetcode.com | | 2 | Джонатан | Джонатанисотлично | | 3 | Аннабель | bella-@leetcode.com | | 4 | Салли | sally.come@leetcode.com | | 5 | Марван | quarz#2020@leetcode.com | | 6 | Дэвид | david69@gmail.com | | 7 | Шапиро | .shapo@leetcode.com | +---------+-----------+-------------------------+ Выход: +---------+-----------+-------------------------+ | идентификатор пользователя | имя | почта | +---------+-----------+-------------------------+ | 1 | Уинстон | winston@leetcode.com | | 3 | Аннабель | bella-@leetcode.com | | 4 | Салли | sally.come@leetcode.com | +---------+-----------+-------------------------+ Объяснение: Почтовый адрес пользователя 2 не имеет домена. В письме пользователя 5 присутствует символ #, который недопустим. В почтовом ящике пользователя 6 отсутствует домен Leetcode. В письме пользователя 7 точка стоит.

import pandas as pd

data = [[1, 'Winston', 'winston@leetcode.com'], [2, 'Jonathan', 'jonathanisgreat'], [3, 'Annabelle', 'bella-@leetcode.com'], [4, 'Sally', 'sally.come@leetcode.com'], [5, 'Marwan', 'quarz#2020@leetcode.com'], [6, 'David', 'david69@gmail.com'], [7, 'Shapiro', '.shapo@leetcode.com']] users = pd.DataFrame(data, columns=['user_id', 'name', 'mail']).astype({'user_id':'int64', 'name':'object', 'mail':'object'})

def valid_emails(users: pd.DataFrame) -> pd.DataFrame:

1527. Patients With a Condition - Пациенты с заболеванием ​

Легкий Темы значок премиум-замка Компании Схема SQL Схема Pandas Стол:Patients

+--------------+---------+ | Название столбца | Тип | +--------------+---------+ | patient_id | int | | имя_пациента | varchar | | условия | варчар | +--------------+---------+ patient_id является первичным ключом (столбцом с уникальными значениями) для этой таблицы. 'conditions' содержит 0 или более символов кода, разделенных пробелами. В этой таблице представлена ​​информация о пациентах, находящихся в больнице.

Напишите решение для поиска patient_id, patient_name и заболеваний пациентов с диабетом I типа. Диабет I типа всегда начинается с DIAB1префикса.

Возвращает таблицу результатов в любом порядке .

Формат результата представлен в следующем примере.

Пример 1:

Вход: Столик с пациентами: +------------+--------------+--------------+ | идентификатор пациента | имя пациента | состояния | +------------+--------------+--------------+ | 1 | Даниэль | Кашель YFEV | | 2 | Алиса | | | 3 | Боб | DIAB100 MYOP | | 4 | Джордж | ACNE DIAB100 | | 5 | Ален | DIAB201 | +------------+--------------+--------------+ Выход: +------------+--------------+--------------+ | идентификатор пациента | имя пациента | состояния | +------------+--------------+--------------+ | 3 | Боб | DIAB100 MYOP | | 4 | Джордж | ACNE DIAB100 | +------------+--------------+--------------+ Пояснение: У Боба и Джорджа заболевание, начинающееся с гена DIAB1.

import pandas as pd

data = [[1, 'Daniel', 'YFEV COUGH'], [2, 'Alice', ''], [3, 'Bob', 'DIAB100 MYOP'], [4, 'George', 'ACNE DIAB100'], [5, 'Alain', 'DIAB201']] patients = pd.DataFrame(data, columns=['patient_id', 'patient_name', 'conditions']).astype({'patient_id':'int64', 'patient_name':'object', 'conditions':'object'})

def find_patients(patients: pd.DataFrame) -> pd.DataFrame:

🛠️ 3. Data Manipulation (Манипуляции с данными) ​

  • [ ] Nth Highest Salary
  • [ ] Second Highest Salary
  • [ ] Department Highest Salary
  • [ ] Rank Scores
  • [ ] Delete Duplicate Emails
  • [ ] Rearrange Products Table

📊 4. Statistics (Статистика) ​

  • [ ] The Number of Rich Customers
  • [ ] Immediate Food Delivery I
  • [ ] Count Salary Categories

📈 5. Data Aggregation (Агрегация данных) ​

  • [ ] Find Total Time Spent by Each Employee
  • [ ] Game Play Analysis I
  • [ ] Number of Unique Subjects Taught by Each Teacher
  • [ ] Classes More Than 5 Students
  • [ ] Customer Placing the Largest Number of Orders
  • [ ] Group Sold Products By The Date
  • [ ] Daily Leads and Partners

🔄 6. Data Integration (Интеграция и объединение данных) ​

  • [ ] Actors and Directors Who Cooperated At Least Three Times
  • [ ] Replace Employee ID With The Unique Identifier
  • [ ] Students and Examinations
  • [ ] Managers with at Least 5 Direct Reports
  • [ ] Sales Person