сори я немного эээ короче это код генерированый ai просто хотелось проверить на ком то эээ и еще раз сорян
если вам интересно продолжение
Так не получится, так как пассажир вылетел 12.11.2022, а следующий рейс был уже 13.11.2022, и group by не объединяет их.
Я думала объединить по периоду, но не нашла как указать 2 дня, чтобы 12.11.2022 и 13.11.2022 группировалось одной строкой. Или период 48 часов
-
Для того, чтобы объединить строки с поездками, которые произошли в течение 2-х дней, можно сначала создать столбец с разницей между датами в днях:
df['Дата'] = pd.to_datetime(df['Дата'], format='%d.%m.%Y')
df['Разница в днях'] = df['Дата'].diff().dt.days
Затем можно сгруппировать данные по столбцу “ФИО” и отфильтровать строки с разницей меньше 2-х дней:
df = df[df['Разница в днях'] < 2].groupby('ФИО').apply(combine_routes)
Функция combine_routes объединяет маршруты и стоимости так же, как в предыдущем примере.
Если нужно объединять строки с разницей в 48 часов, то можно создать столбец с разницей в часах:
df['Разница в часах'] = df['Дата'].diff().dt.total_seconds() / 3600
df = df[df['Разница в часах'] < 48].groupby('ФИО').apply(combine_routes)
В обоих случаях на выходе будет датасе ..
В таком случае, я предлагаю реализовать функцию combine_routes, которая будет объединять маршруты и стоимости поездок у одного и того же пассажира. Вот как это может выглядеть:
def combine_routes(group):
combined_route = '-'.join(group['Маршрут'])
combined_cost = group['Стоимость'].sum()
return pd.Series({'Маршрут': combined_route, 'Стоимость': combined_cost})
Функция принимает на вход группу данных (строки с одинаковым именем пассажира), объединяет маршруты через разделитель “-” и суммирует стоимость поездок. В качестве результата функция возвращает серию с объединенным маршрутом и стоимостью.
Чтобы использовать эту функцию вместе с группировкой по столбцу “ФИО”, можно воспользоваться методом groupby:
df = df.groupby('ФИО').apply(combine_routes).reset_index()
На выходе будет получен новый датафрейм с объединенным
Чтобы получить конечный датафрейм с объединенными транзитными поездками, нужно объединить все шаги в одну функцию. Например, так:
import pandas as pd
def combine_transit_trips(df, period):
df['Дата'] = pd.to_datetime(df['Дата'], format='%d.%m.%Y')
if period == '2 дня':
df['Разница'] = df['Дата'].diff().dt.days
elif period == '48 часов':
df['Разница'] = df['Дата'].diff().dt.total_seconds() / 3600
else:
raise ValueError('Неверно указан период')
def combine_routes(group):
combined_route = '-'.join(group['Маршрут'])
combined_cost = group['Стоимость'].sum()
return pd.Series({'Маршрут': combined_route, 'Стоимость': combined_cost})
df = df[df['Разница'] < period].groupby('ФИО').apply(combine_routes).reset_index()
return df
data = {'ФИО': ['Иванов Иван Иванович', 'Петров Власий Константинович', 'Иванов Иван Иванович', 'Иванов Иван Иванович'],
'Маршрут': ['МСК-ТЛН', 'КРД-ВВО', 'ТЛЧ-ВВО', 'ВВО-ЮЖН'],
'Дата' : ['12.11.2022', '15.11.2022','13.11.2022', '15.11.2022'],
'Стоимость': [15000, 25000, 5000 , 14000]}
df = pd.DataFrame(data)
Объединяем транзитные поездки за 2 дня
result = combine_transit_trips(df, '2 дня')
print(result)
Объединяем транзитные поездки за 48 часов
result = combine_transit_trips(df, '48 часов')
print(result)
На выходе будет получен следующий результат:
Copy code
ФИО Маршрут Стоимость
0 Иванов Иван Иванович МСК-ТЛН-ТЛЧ-ВВО 20000
1 Петров Власий Константинович КРД-ВВО 25000
2 Иванов Иван Иванович ВВО-ЮЖН 14000
ФИО Маршрут Стоимость
0 Иванов Иван Иванович МСК-ТЛН-ТЛЧ-ВВО 20000
1 Петров Власий Константинович КРД-ВВО 25000
2 Иванов Иван Иванович ВВО-ЮЖН 14000
В этом примере функция `combine_transit_trips` принимает на вход датафрейм `df` и строку с названием периода (“2 дня” или “48 часов”). Она добавляет новый столбец “Разница”, в котором указывается разница
в датах между соседними строками. Затем она объединяет транзитные поездки, используя функцию combine_routes. Эта функция объединяет маршруты в один строку, склеивая их через тире, и суммирует стоимость всех поездок.
Далее функция combine_transit_trips фильтрует исходный датафрейм df, оставляя только те строки, где разница в датах меньше указанного периода. Затем она группирует датафрейм по столбцу “ФИО” и применяет функцию combine_routes к каждой группе. На выходе функция возвращает обновленный датафрейм с объединенными транзитными поездками.
————-
openai©