#объединим данные в новый датафрейм, так чтобы ни одна поездка не потерялась и чтобы были ценовые характеристики в каждой поездке all_in_one = users.merge(riders, on='user_id',how='right') all_in_one = all_in_one.merge(sub, on='subscription_type', how='left') print(all_in_one.head()) #выделим в датафрейм поездки по подписке и отдельно - без riders_ultra = all_in_one.query('subscription_type =="ultra"') riders_free = all_in_one.query('subscription_type =="free"') #соберем сводную таблицу методом .groupby agg_data = all_in_one.groupby(['user_id','month']).agg({'distance':'sum','duration':['sum','count']}) #наведем красоту в названиях колонок и идексах agg_data.columns = ['distance_sum', 'duration_sum', 'rides_count'] agg_data = agg_data.reset_index() #объявляем функцию расчета выручки в месяц def income_func (row): if row['user_id'] in riders_ultra['user_id']: return 6*row['duration_sum'].round()+199 if row['user_id'] in riders_free['user_id']: return 8*row['duration_sum']+ 50*row['rides_count'] #добавим столбец со стоимостью поездок, применив функцию к каждой строке agg_data agg_data['income'] = agg_data.apply(income_func, axis=1) print(agg_data.head(15)) print(agg_data.tail(15))