Вопрос или проблема
Здравствуйте, я пытаюсь перейти с 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()
метод, этот метод выполняет необходимую вам операцию.
- Я собираюсь использовать следующие примерные данные:
дата | 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
-
Мы создаем новый столбец
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
-
Импорт необходимых библиотек и создание 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)
-
Группировка данных и расчёт разницы
Чтобы рассчитать разницу междуtotal_volume
текущей строки и предыдущей строки для каждогоproject_name
, следует использовать методgroupby()
в сочетании сdiff()
.df['daily_volume'] = df.groupby('project_name')['total_volume'].diff()
-
Результаты
После выполнения вышеуказанного кода, ваш 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 упрощает задачу по вычислению разницы в необходимой группе данных. Убедитесь, что данные предварительно очищены и находятся в правильном формате, чтобы избежать проблем с вычислениями. Эти методы позволяют аналитикам и разработчикам быстро манипулировать и анализировать данные, что в свою очередь способствует принятию обоснованных решений на основе анализа данных.
Это решение является эффективным и легко масштабируемым для больших и сложных наборов данных. Не забудьте при работе с данными проверять их на наличие пропусков и аномалий, чтобы обеспечить целостность ваших анализов.
Если вам нужна дополнительная информация или возникли вопросы, пожалуйста, не стесняйтесь обращаться.