У вас есть DataFrame sales, содержащий информацию ...
作成日: 2025年12月24日
使用モデル GPT-5.2 Thinking by Chat01
作成日: 2025年12月24日
使用モデル GPT-5.2 Thinking by Chat01
У вас есть DataFrame sales, содержащий информацию о продажах в вашей компании. Индексами в этом DataFrame являются даты в виде объектов datetime. Однако, в некоторые дни продаж не было, и в результате индексы в sales не являются непрерывной последовательностью дат. Вам необходимо проиндексировать sales таким образом, чтобы даты шли непрерывно от первой до последней. Для решения этой задачи можно использовать метод reindex с параметром index, равным созданному диапазону дат.
Для создания непрерывной последовательности дат можно использовать pd.date_range() - это функция библиотеки Pandas, которая позволяет создавать диапазоны дат с равным интервалом. Она возвращает объект типа DatetimeIndex, содержащий набор последовательных дат, заданных определенным образом.
Функция pd.date_range() имеет несколько параметров, которые позволяют определить начальную и конечную даты, длину интервала, а также частоту создаваемых дат. Некоторые из наиболее часто используемых параметров:
start: начальная дата диапазона.
end: конечная дата диапазона.
periods: количество дат, которое нужно создать в диапазоне.
freq: частота создаваемых дат.
Частота (freq) задает интервал между датами и может принимать различные значения, такие как "D" для ежедневных дат, "M" для ежемесячных дат, "Y" для ежегодных дат и т.д.
Пример использования функции pd.date_range() для создания диапазона дат с частотой ежедневных дат в течение 5 дней, начиная с 1 января 2022 года:
import pandas as pd
date_range = pd.date_range(start='2022-01-01', periods=5, freq='D')
print(date_range)
Результат:
DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'], dtype='datetime64[ns]', freq='D')
В результате выполнения кода, функция pd.date_range() вернула набор последовательных дат с частотой ежедневных дат в течение 5 дней, начиная с 1 января 2022 года.
Чтобы сделать индекс sales непрерывным (каждый день от первой даты до последней), создайте полный диапазон дат и переиндексируйте DataFrame:
pythonimport pandas as pd # полный ежедневный диапазон от min до max даты в индексе full_idx = pd.date_range(start=sales.index.min(), end=sales.index.max(), freq="D") # переиндексация (дни без продаж станут NaN) sales = sales.reindex(full_idx) # (необязательно) можно сохранить имя индекса sales.index.name = "date"
После этого в sales будут присутствовать все даты подряд, а для пропущенных дней значения станут NaN.
Если вместо NaN нужно подставить нули (часто удобно для продаж), можно так:
pythonsales = sales.reindex(full_idx, fill_value=0)
Code
Testcase
Testcase
Test Result
1731. The Number of Employees Which Report to Each Employee
Solved
Easy
Topics
premium lock icon
Companies
SQL Schema
Pandas Schema
Table: Employees
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| employee_id | int |
| name | varchar |
| reports_to | int |
| age | int |
+-------------+----------+
employee_id is the column with unique values for this table.
This table contains information about the employees and the id of the manager they report to. Some employees do not report to anyone (reports_to is null).
For this problem, we will consider a manager an employee who has at least 1 other employee reporting to them.
Write a solution to report the ids and the names of all managers, the number of employees who report directly to them, and the average age of the reports rounded to the n
Нужно сгруппировать сотрудников по reports_to (это id менеджера), посчитать COUNT(*), взять AVG(age) и округлить до ближайшего целого, затем подтянуть имя менеджера и отсортировать по employee_id. По условию округление — до ближайшего целого. (LeetCode)
sqlSELECT m.employee_id, m.name, COUNT(e.employee_id) AS reports_count, ROUND(AVG(e.age)) AS average_age FROM Employees e JOIN Employees m ON e.reports_to = m.employee_id GROUP BY m.employee_id, m.name ORDER BY m.employee_id;
pythonimport pandas as pd def number_of_employees(employees: pd.DataFrame) -> pd.DataFrame: # берем только тех, кто кому-то репортит (т.е. строки "подчиненных") r = employees.dropna(subset=["reports_to"]).copy() # агрегируем по id менеджера agg = ( r.groupby("reports_to", as_index=False) .agg(reports_count=("employee_id", "size"), average_age=("age", "mean")) .rename(columns={"reports_to": "employee_id"}) ) # округление среднего возраста до ближайшего целого agg["average_age"] = agg["average_age"].round().astype(int) # reports_to часто становится float из-за NaN → приводим id к int для join agg["employee_id"] = agg["employee_id"].astype(int) # подтягиваем имя менеджера res = agg.merge(employees[["employee_id", "name"]], on="employee_id", how="left") # нужный порядок колонок и сортировка return res[["employee_id", "name", "reports_count", "average_age"]].sort_values("employee_id")