<jupyter_start><jupyter_text>Данное решение не является решением изначальной задачи. Здесь мы хотим узнать затраты на 1 итерацию запланированных ремонтов. Изначальная же задача состоит в том, чтобы для всего временного интервала и всех вагонов отдать даты ремонтов, которые могут происходить раньше запланированных.<jupyter_code>import pandas as pd
car = 57463085  # возьмем только один вагон
repares = pd.read_csv('Sibur_2_dataset/Вагоны и плановые ремонты.csv')
repares = repares[repares['car_num'] == car]
repares
movements = pd.read_csv('Sibur_2_dataset/Передвижения вагонов по датам.csv')
movements = movements[movements['car_num'] == car]
movements.head()
repare_prices = pd.read_csv('Sibur_2_dataset/Плановые ремонты со стоимостями.csv')
repare_prices
repare_prices = {'std_kap': 94000000, 
                 'std_ppr': 19000000, 
                 'std_dep': 13000000, 
                 'std_vogi': 18000000, 
                 'preparation': 3000000}
price_for_km = 1000
distances = pd.read_csv('Sibur_2_dataset/Расстояния от станций до ремонтных депо.csv')
distances.head()<jupyter_output><empty_output><jupyter_text>Посчитаем стоимость ремонтов, в случае, если делаем их по расписанию. Тут нужно сделать замечание, что мы считаем только 1 итерацию ремонтов. Правильнее будет посчитать все итерации: то есть если капитальный ремонт запланирован на 2021-08-08, но мы видим, что вагон эксплуатировался 2019 году, то 2019-08-08 у него должен был быть запланированный капитальный ремонт, т.к. ремонты утилизируются за 2 года<jupyter_code>def get_station_from_date(date):
    for index, (car_num, station_date, station_id) in movements.iterrows():
        if station_date < date:
            return station_id
    assert False, 'No stations before this date'

total_repare_price = 0
for repare_type in ['std_kap', 'std_ppr', 'std_dep', 'std_vogi']:
    repare_date = repares[repare_type].values[0]
    station_id = get_station_from_date(repare_date)
    min_distance_to_depo = distances[distances['station_id'] == 2]['distance_to_depo'].min()
    total_repare_price += 2 * min_distance_to_depo * price_for_km + \
            repare_prices[repare_type] + \
            repare_prices['preparation']

total_repare_price<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0853712761227212, 'fraction_numerical': 0.03646064917741218, 'mean_word_length': 4.754475703324808, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '57579', 'license': 'MIT', 'n_tokens_mistral': 914, 'n_tokens_neox': 925, 'n_words': 193, 'path': 'price_for_one_vagon.ipynb', 'repo_name': 'rhangelxs/notebooks', 'size': '2249'}