Как рассчитать разницу на основе совпадающих критериев

Вопрос или проблема

image

Здравствуйте, я пытаюсь перейти с Excel на Pandas.

Я хочу добавить новый столбец под названием ‘daily_volume’, где, если ‘project_name’ равен ‘project_name’ в предыдущей строке, то рассчитать разницу.

Например, 1,424.53 – 1,343.68 = 80.85

Моя цель – увидеть 80.85 во второй строке под только что созданным столбцом ‘daily_volume’ для \$LONDON Gift.

В общем, первая строка для названия проекта всегда будет пустой.

Если я вас правильно понял, идея заключается в том, чтобы рассчитать разницу между текущим total_volume и его непосредственно нижним, принимая во внимание project_name, верно? Вы можете сгруппировать свой датафрейм по столбцу project_name, выбрать total_volume, а затем вы можете использовать .diff() метод, этот метод выполняет необходимую вам операцию.

  1. Я собираюсь использовать следующие примерные данные:
дата total_volume project_name
0 2021-08-26 1343.68 \$LONDON Gift
1 2021-08-26 1424.53 \$LONDON Gift
2 2021-08-26 1800.10 \$LONDON Gift
3 2021-08-26 2345.23 \$GROUP_2
4 2021-08-26 2500.45 \$GROUP_2
5 2021-08-26 2567.76 \$GROUP_3

Вы можете заметить, что есть 3 разные группы: $LONDON Gift, $GROUP_2 и $GROUP_3

  1. Мы создаем новый столбец daily_volume следующим образом:

    df['daily_volume'] = df.groupby('project_name')['total_volume'].diff()
    

Вывод:

дата total_volume project_name daily_volume
0 2021-08-26 1343.68 \$LONDON Gift NaN
1 2021-08-26 1424.53 \$LONDON Gift 80.85
2 2021-08-26 1800.10 \$LONDON Gift 375.57
3 2021-08-26 2345.23 \$GROUP_2 NaN
4 2021-08-26 2500.45 \$GROUP_2 155.22
5 2021-08-26 2567.76 \$GROUP_3 NaN

Последняя рекомендация: Избегайте использования изображений в качестве данных, вставьте код, который у вас есть в вопросе, что-то вроде: pd.DataFrame({...}).

Ответ или решение

Для расчёта разницы на основе совпадающих критериев в Pandas, особенно для вашего сценария с проектами и их объёмами, существует удобный способ использования метода groupby() и diff(). Рассмотрим это на конкретном примере, как это можно реализовать.

Шаги для создания колонки daily_volume

  1. Импорт необходимых библиотек и создание DataFrame
    Прежде всего, необходимо импортировать библиотеку Pandas и создать DataFrame, содержащий ваши данные.

    import pandas as pd
    
    # Создание DataFrame с примерными данными
    data = {
       'date': ['2021-08-26', '2021-08-26', '2021-08-26', '2021-08-26', '2021-08-26', '2021-08-26'],
       'total_volume': [1343.68, 1424.53, 1800.10, 2345.23, 2500.45, 2567.76],
       'project_name': ['$LONDON Gift', '$LONDON Gift', '$LONDON Gift', '$GROUP_2', '$GROUP_2', '$GROUP_3']
    }
    
    df = pd.DataFrame(data)
  2. Группировка данных и расчёт разницы
    Чтобы рассчитать разницу между total_volume текущей строки и предыдущей строки для каждого project_name, следует использовать метод groupby() в сочетании с diff().

    df['daily_volume'] = df.groupby('project_name')['total_volume'].diff()
  3. Результаты
    После выполнения вышеуказанного кода, ваш DataFrame будет выглядеть следующим образом:

           date  total_volume     project_name  daily_volume
    0  2021-08-26       1343.68      $LONDON Gift           NaN
    1  2021-08-26       1424.53      $LONDON Gift         80.85
    2  2021-08-26       1800.10      $LONDON Gift        375.57
    3  2021-08-26       2345.23          $GROUP_2           NaN
    4  2021-08-26       2500.45          $GROUP_2        155.22
    5  2021-08-26       2567.76          $GROUP_3           NaN

    Обратите внимание, что для первой строки в каждом проекте daily_volume будет NaN, поскольку нет предыдущей строки для вычитания.

Заключение

Использование методов groupby() и diff() в Pandas упрощает задачу по вычислению разницы в необходимой группе данных. Убедитесь, что данные предварительно очищены и находятся в правильном формате, чтобы избежать проблем с вычислениями. Эти методы позволяют аналитикам и разработчикам быстро манипулировать и анализировать данные, что в свою очередь способствует принятию обоснованных решений на основе анализа данных.

Это решение является эффективным и легко масштабируемым для больших и сложных наборов данных. Не забудьте при работе с данными проверять их на наличие пропусков и аномалий, чтобы обеспечить целостность ваших анализов.

Если вам нужна дополнительная информация или возникли вопросы, пожалуйста, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...