Как сопоставить слово из одного столбца и сравнить с другим столбцом в DataFrame pandas

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

У меня есть следующий датафрейм

Текст                                Ключевые слова       Тип
Это тюбик с роллером                 роллер        шарик
Это бочка                        бочка         барр
Неизвестная форма                                   другие
это сборка                     сборка       сборка
это герметичная сборка             сборка       фабрика
это роллер двойной                роллер        фабрика

Сначала я определил ключевые слова, и на основе ключевого слова и его соответствующего типа, результат должен быть истинным или ложным

Например,
когда ключевое слово “роллер”, тип должен быть “шарик” или “другие”
когда ключевое слово “бочка”, тип должен быть “барр” или “другие”

Вывод

Текст                                Ключевые слова       Тип         Результат
Это тюбик с роллером                 роллер        шарик         Истина
Это бочка                        бочка         барр         Истина
Неизвестная форма                                   другие       Ложь
это сборка                     сборка       сборка     Истина
это герметичная сборка             сборка       фабрика      Истина
это роллер двойной                роллер        фабрика      Ложь

Если вы знаете правила, то вы можете закодировать их так, как обычно делаете.

Например.

df['Ключевые слова'] == "роллер" & (df['Тип'] == "шарик" | df['Тип'] == "другие") => df['Результат'] = Истина

Если у вас слишком много правил и ассоциаций для ручного кодирования, вы можете рассмотреть возможность использования таблицы поиска + процедуры объединения. Здесь вы можете сохранить все правила и ассоциации в виде таблицы (т.е. это будет включать Ключевые слова, Тип и Результат), и объединить Результат обратно с вашим оригинальным датафреймом (по Ключевым словам и Типу).

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

Для решения задачи сопоставления ключевых слов и соответствующих типов в фрейме данных pandas можно использовать несколько методов, включая условные операторы и создание таблицы правил. Рассмотрим оба подхода, чтобы добиться желаемого результата.

1. Способы решения задачи

1.1. Условные операторы

Если количество правил невелико, вы можете использовать условные операторы, чтобы проверить, соответствуют ли значения в столбцах Keywords и Type заданным условиям. Например, вы можете создать новую колонку Result, которая будет содержать значение True, если правило сработало, и False в противном случае.

Вот пример кода:

import pandas as pd

# Создаем пример DataFrame
data = {
    'Text': [
        "It’s a roll-on tube",
        "It is barrel",
        "An unknown shape",
        "it’s a assembly",
        "it’s a sealing assembly",
        "its a roll-on double"
    ],
    'Keywords': [
        "roll-on",
        "barrel",
        "",
        "assembly",
        "assembly",
        "roll-on"
    ],
    'Type': [
        "ball",
        "barr",
        "others",
        "assembly",
        "factory",
        "factory"
    ]
}

df = pd.DataFrame(data)

# Условия проверки
df['Result'] = (
    (df['Keywords'] == "roll-on") & (df['Type'].isin(["ball", "others"])) |
    (df['Keywords'] == "barrel") & (df['Type'].isin(["barr", "others"])) |
    (df['Keywords'] == "assembly") & (df['Type'] == "assembly") |
    (df['Keywords'] == "assembly") & (df['Type'] == "factory")
)

# Преобразуем к логическому типу
df['Result'] = df['Result'].astype(bool)

# Результат
print(df)

В данном примере мы проверяем каждое условие, чтобы установить значение True или False в колонке Result.

1.2. Использование таблицы правил

Для более сложных правил и если число условий велико, эффективнее всего использовать таблицу правил. Создайте отдельный DataFrame с правилами, а затем выполните операцию объединения (merge) с исходным DataFrame.

Пример кода:

# Создаем таблицу правил
rules = {
    'Keywords': ["roll-on", "barrel", "assembly", "assembly"],
    'Type': ["ball", "barr", "assembly", "factory"],
    'Result': [True, True, True, True]
}

rules_df = pd.DataFrame(rules)

# Добавляем правило для others
rules_others = {
    'Keywords': ["roll-on", "barrel"],
    'Type': ["others", "others"],
    'Result': [True, True]
}

rules_df = pd.concat([rules_df, pd.DataFrame(rules_others)], ignore_index=True)

# Объединяем с исходным DataFrame
merged_df = pd.merge(df, rules_df, on=['Keywords', 'Type'], how='left')

# Заполняем отсутствующие значения
merged_df['Result'] = merged_df['Result'].fillna(False)

# Итоговой DataFrame
print(merged_df[['Text', 'Keywords', 'Type', 'Result']])

2. Заключение

Оба способа позволяют вам эффективно проверить условия в ваших данных. Метод выбора зависит от сложности ваших правил. Если это простые условия, используйте условные операторы. Если правил много, создайте таблицу и используйте операции объединения.

Этот подход к обработке данных в pandas не только упрощает анализ, но и способствует более легкому управлению изменениями в правилах. Использование структуры данных для хранения правил делает ваш код более масштабируемым и улучшающим поддержку в будущем.

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

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