Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача "Водители склада" в Python

gruuuuuu2002 Ученик (84), открыт 1 неделю назад
В файле input.csv дана таблица с информацией о работе водителей склада №7:Необходимо вычислить по каждому водителю сколько килограмм суммарно груза он привёз за вычетом суммарного веса вывезенного груза. Итоговую таблицу отсортировать по убыванию этой суммы, а при равенстве её для двух водителей — по возрастанию фамилий водителей (в лексикографическом порядке). Сохранить в формате CSV в файл output.csv.
ПРИМЕР 1
ВВОД
ID,Фамилия водителя,Объем груза,Тип операции
1,Уточкин,2726,Вывоз
2,Петров,3581,Привоз
3,Сидоров,3724,Привоз
4,Петров,2683,Привоз
5,Иванов,1637,Вывоз
6,Уточкин,3836,Вывоз
7,Ежкин,3055,Привоз
8,Иванов,3220,Привоз
9,Сидоров,2584,Вывоз
ВЫВОД
Фамилия водителя,Объем груза
Петров,6264
Ежкин,3055
Иванов,1583
Сидоров,1140
Уточкин,-6562
ПРИМЕР 2
ВВОД
ID,Фамилия водителя,Объем груза,Тип операции
ВЫВОД
Фамилия водителя,Объем груза
ПРИМЕЧАНИЕ
  1. Входные данные хранятся в файле input.csv в формате CSV (разделитель - запятая без пробелов, 1 строка содержит названия столбцов) (подробнее - см. Рекомендации по работе с вводом-выводом).
  2. Входные данные можно считать с помощью pandas.read_csv().
  3. Выходные данные нужно сохранять в файл output.csv также в формате CSV (это можно сделать с помощью DataFrame.to_csv()).
  4. Обратите внимание, что в файле input.csv может вообще не быть никакой информации (только названия колонок). В этом случае в output.csv также нужно сохранить только названия колонок (DataFrame.to_csv() также может корректно это выполнить без указания дополнительных параметров).
  5. В результирующей таблице названия столбцов следует записать на русском языке, поэтому в DataFrame.to_csv() следует дополнительно указать параметр: encoding="utf8".
1 ответ
Александор Заградский Мудрец (14120) 1 неделю назад
Давай начнем с чтения данных из файла input.csv с помощью pandas.read _csv(), затем вычислим сумму груза для каждого водителя, учитывая тип операции (привоз или вывоз), и сохраним результат в файл output.csv. Вот как можно это сделать:
 import pandas as pd 

# Чтение данных из файла input.csv
try:
data = pd.read_csv("input.csv")
except FileNotFoundError:
# Если файл не найден, создаем пустой DataFrame с нужными названиями столбцов
data = pd.DataFrame(columns=["ID", "Фамилия водителя", "Объем груза", "Тип операции"])

# Проверка, если DataFrame пустой, сохраняем только заголовки в output.csv и завершаем скрипт
if data.empty:
data.to_csv("output.csv", index=False, encoding="utf8")
exit()

# Вычисление суммарного груза за вычетом вывезенного груза для каждого водителя
data["Объем груза"] = data.apply(lambda row: row["Объем груза"] if row["Тип операции"] == "Привоз" else -row["Объем груза"], axis=1)
result = data.groupby("Фамилия водителя")["Объем груза"].sum().reset_index()

# Сортировка результата по убыванию суммы груза и по возрастанию фамилий
result = result.sort_values(by=["Объем груза", "Фамилия водителя"], ascending=[False, True])

# Сохранение результата в файл output.csv
result.to_csv("output.csv", index=False, encoding="utf8")
Этот скрипт сначала пытается прочитать данные из файла input.csv. Если файл не найден, он создает пустой DataFrame с нужными заголовками. Затем он проверяет, пуст ли DataFrame. Если DataFrame пустой, он просто сохраняет заголовки в файл output.csv. Если DataFrame содержит данные, скрипт вычисляет суммарный объем груза для каждого водителя, учитывая тип операции, затем сортирует результат и сохраняет его в файл output.csv.
Похожие вопросы