Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Васильев Ю. - Python для data science (Библиотека программиста) - 2023.pdf
Скачиваний:
7
Добавлен:
07.04.2024
Размер:
7.21 Mб
Скачать

156      Глава 7. Объединение датасетов

значения кортежей нас, по сути, не интересуют, для их обозначения после ключевого слова for мы используем заполнители _.

Выполнив все шаги, представленные выше, получим:

779.0

Подсчитать итоговую сумму только для тех заказов, которые есть в списке orders, можно с помощью модифицированной версии sum():

sum(pr*qt for _, dt, _, _, _, pr, qt in orders_details_right if dt != None)

Здесь мы добавляем в цикл блок if, чтобы отфильтровать заказы, которых не было в списке orders . Игнорируем строки, у которых поле с датой (dt) содержит None, указывающее, что информация о заказе не была получена из orders. Результат составит:

731.0

Конкатенация массивов NumPy

Для конкатенации массивов NumPy не получится использовать оператор + как со списками. Это связано с тем, что, как говорилось в главе 3, в NumPy оператор + зарезервирован для выполнения операций поэлементного сложения над несколькими массивами. Вместо этого для конкатенации двух массивов NumPy используется функция numpy.concatenate().

Для демонстрации будем использовать массив base_salary из раздела «Создание массива NumPy» главы 3. Данный массив был создан следующим образом (здесь назовем его base_salary1):

import numpy as np

jeff_salary = [2700,3000,3000] nick_salary = [2600,2800,2800] tom_salary = [2300,2500,2500]

base_salary1 = np.array([jeff_salary, nick_salary, tom_salary])

Напомню, что каждая строка массива содержит данные о базовом окладе конкретного сотрудника за три месяца. Теперь предположим, что у нас есть информация об окладе еще двух сотрудников в другом массиве — base_salary2:

Конкатенация массивов NumPy      157

maya_salary = [2200,2400,2400] john_salary = [2500,2700,2700]

base_salary2 = np.array([maya_salary, john_salary])

Требуется хранить информацию об окладе всех пяти сотрудников в одном массиве. Для этого конкатенируем base_salary1 и base_salary2, используя numpy. concatenate():

base_salary = np.concatenate((base_salary1, base_salary2), axis=0)

Первый параметр функции — кортеж с массивами, подлежащими конкатенации. Второй параметр — axis — является критическим: он определяет, должны ли массивы быть конкатенированы горизонтально или вертикально, другими словами, будет ли второй массив добавлен в виде новых строк или новых столбцов. Первая ось (0) проходит по вертикали. Таким образом, axis=0сообщает функции concatenate(), что нужно расположить строки из base_salary2 под строками base_salary1. В результате получаем следующий массив:

[[2700 3000 3000] [2600 2800 2800] [2300 2500 2500], [2200 2400 2400], [2500 2700 2700]]

Теперь представьте, что поступила информация об окладе за следующий месяц. Можем поместить эти значения в новый массив NumPy, как показано ниже:

new_month_salary = np.array([[3000],[2900],[2500],[2500],[2700]])

На экране этот массив будет выглядеть так:

[[3000]

[2900]

[2500]

[2500]

[2700]]

Теперь нам нужно добавить массив new_month_salary к массиву base_salary в виде дополнительного столбца. Предполагая, что порядок перечисления сотрудников одинаков в обоих массивах, будем использовать concatenate():

base_salary = np.concatenate((base_salary, new_month_salary), axis=1)