Ошибка в объединении таблиц и вывода разницы среднего чека, при использовании Pandas

Рейтинг: 1Ответов: 0Опубликовано: 20.02.2023

Задача: Есть две таблицы:

  • поездки (order_id, user_id, order_dt, order_cost) - все поездки в Uber.
  • пользователи (user_id, gender) - таблица пользователей, где размечен пол пользователя (М/Ж)

Нужно:

  • Посчитать разницу среднего чека для М/Ж пользователей за какой-то период (любым способом в SQL, Python).

  • Объяснить, почему он может отличаться.

Решил её двумя способами, но мне пишут, что имеется ошибка и не говорят где и в чём именно (может в логике решения).

Помогите найти.

Мой вариант решения:

  1. на питоне:
    import pandas as pd
    # загружаем данные
    taxi = pd.read_csv('taxi.csv')
    users = pd.read_csv('users.csv')

    # объединяем таблицы по user_id
    df = pd.merge(taxi, users, on='user_id')

    # фильтруем записи по дате заказа (промежуток взял 2022 год)
    start_date = pd.to_datetime('2022-01-01')
    end_date = pd.to_datetime('2022-12-31')
    df = df[(df['order_dt'] >= start_date) & (df['order_dt'] <= end_date)]

    # вычисляем средний чек для каждой группы
    result = df.groupby('gender')['order_cost'].mean()

    # вычисляем разницу между средними чеками для мужчин и женщин
    diff = result.loc['М'] - result.loc['Ж']

    # выводим результат
    print(diff)
  1. на SQL

Этот запрос возвращает средний чек для каждой группы пользователей

    SELECT gender, AVG(order_cost) AS avg_cost
    FROM taxi
    JOIN users ON taxi.user_id = users.user_id
    WHERE order_dt BETWEEN '2022-01-01' AND '2022-12-31'
    GROUP BY gender;

Считаем разницу между средними чеками для мужчин и женщин

    SELECT AVG(CASE WHEN gender = 'М' THEN order_cost ELSE 0 END) AS avg_cost_male,
           AVG(CASE WHEN gender = 'Ж' THEN order_cost ELSE 0 END) AS avg_cost_female,
           AVG(CASE WHEN gender = 'М' THEN order_cost ELSE 0 END) - AVG(CASE WHEN gender = 'Ж' 
    THEN order_cost ELSE 0 END) AS diff
    FROM taxi
    JOIN users ON taxi.user_id = users.user_id
    WHERE order_dt BETWEEN '2022-01-01' AND '2022-12-31';

Ответы

Ответов пока нет.