Arhn - архитектура программирования

Векторизованный поиск значений столбца фрейма данных Pandas в отдельном списке

Я ищу быстрый (векторизованный) способ выполнения вычислений с использованием содержимого фрейма данных Pandas.

Мой фрейм данных содержит 2 метки для каждой строки, и я хочу найти значения, соответствующие каждой метке (из словаря/списка), и выполнить расчет, возвращая результат в новый столбец в фрейме данных.

Ниже я привожу свой рабочий пример с использованием циклов.

label1s = np.array(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], dtype=str)
label2s = np.array(['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'], dtype=str)
data = np.column_stack([label1s, label2s])

label_values = {'A':1, 'B':2, 'C':3}

df = pd.DataFrame(data=data, columns=['Label1', 'Label2'])

new_col = np.zeros_like(label1s, dtype=float)

for index, row in df.iterrows():
    val1 = label_values[row['Label1']]
    val2 = label_values[row['Label2']]
    new_col[index] = val1 - val2

df['result'] = new_col
df

Однако для больших наборов данных петля крайне нежелательна и медленна.

Пожалуйста, есть ли способ оптимизировать это?

Я изучил некоторые функции pandas, такие как «Поиск», но, похоже, для этого нужны массивы каждого размера, тогда как в моем случае мне нужно искать значения из внешнего списка и разных размеров для фрейма данных.


Ответы:


1

Вы можете map перевести словарь на нужный столбцы, т.е.

df['result'] = df.Label1.map(label_values) - df.Label2.map(label_values)
18.02.2018
  • я за такой подход 18.02.2018
  • Спасибо, это дает ускорение примерно в 5 раз по сравнению с циклом. 18.02.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..