Найти, находится ли значение в столбцах в другом столбце

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

У меня есть два листа Excel, которые я загрузил в Python, таблица A и таблица B. Я хочу взять каждое значение из столбца 1 (house_address) и столбца 2 (zip) из таблицы A и использовать цикл for, чтобы увидеть, находится ли значение в Таблица B, столбец 1 (полный_адрес).

Таблица А:

дом_адрес молния 124 ХАУС ЛЭН 12345 123 дом пер. 54321

Таблица Б:

дом_адрес молния свойство_размер полный адрес 124 ХАУС ЛЭН 12345 1000 ДОМ 124 12345 123 дом пер. 54321 2000 г. 54321, дом 123, пер. 987 клубничный рд 11111 3000 987 клубника рд 11111

Мой код:

# upload tables
table_a = pd.read_excel('table_a.xlsx')
table_b = pd.read_excel('table_b.xlsx')

# create a list from table b and table b of the full_address column for matching purposes
full_address_table_b = list(table_b['full_address'])


# for loop checks if the address is already in my table_B. If it is return the information to # the end user. If it is not then move on to the else statement which will do something else
for i in range(len(table_a)):

    
    # create a concat list of table a full address
    full_address_table_a = str(table_a['house_address']) + " " + str(table_b['zip'])

    # check if the address is already in our dataset
    if table_b.loc[table_b['full_address'].str.contains(full_address_table_a, case=False)]:

        # if it is, then just print the info from table b
        print(housing_df[housing_df['full_address'] == full_address_test])

    # else run another piece of code
    else:
        print("run this part of the code")

Когда я запускаю приведенный выше код, я получаю следующую ошибку:

ValueError: истинное значение DataFrame неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all()

Мне было интересно, знает ли кто-нибудь, что я делаю неправильно здесь. Существует также, вероятно, более эффективный способ создания вышеуказанного кода, поэтому предложения по более эффективному коду приветствуются.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
311
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете просто объединить их, чтобы увидеть, какие значения являются общими, если это масштаб вашей проблемы:

table_a.merge(table_b, on = ['house_address', 'zip'])

приводит к:

house_address   zip property_size   full_address
0   124 HOUSE LANE  12345   1000    124 HOUSE LANE 12345
1   123 home ln 54321   2000    123 home ln 54321

Если вы хотите конкретно увидеть, какие из них находятся только в table_a или table_b или в обоих, передайте индикатор, а затем просто отфильтруйте на его основе, если это необходимо:

table_a.merge(table_b, on = ['house_address', 'zip'], how = 'outer', indicator = True)

приводит к:

house_address   zip property_size   full_address    _merge
0   124 HOUSE LANE  12345   1000    124 HOUSE LANE 12345    both
1   123 home ln 54321   2000    123 home ln 54321   both
2   987 strawberry rd   11111   3000    987 strawberry rd 11111 right_only

Я думаю, что это одно из решений, но причина, по которой я использую цикл for, заключается в том, что я создаю что-то, что заставит пользователей вводить таблицы адресов в формате Excel и будет ожидать вывод информации для всех домов. Цикл for позволит увидеть, находится ли адрес уже в основном наборе данных (если это так, он просто возьмет данные оттуда. Если нет, вызовет API для получения данных).

beeeZeee 13.12.2020 21:05

Если вы не хотите использовать цикл for, вы можете сделать что-то вроде этого:

df1['full_address'] = df1['house_address'].astype(str) + " " df1['zip'].astype(str)
first_list = df1['house_address'].unique().tolist()
second_list = df2['house_address'].unique().tolist()

common_houses = [house for house in first_list if house in second_list] 

Затем, чтобы увидеть полные данные о том, что полный адрес совпадает между двумя, вы можете сделать:

common_houses_df = df2[df2['full_address'].isin(common_houses)]

который даст вам полный набор данных с общими адресами из двух файлов.

Я думаю, что это одно из решений, но причина, по которой я использую цикл for, заключается в том, что я создаю что-то, что заставит пользователей вводить таблицы адресов в формате Excel и будет ожидать вывод информации для всех домов. Цикл for позволит увидеть, находится ли адрес уже в основном наборе данных (если это так, он просто возьмет данные оттуда. Если нет, вызовет API для получения данных).

beeeZeee 13.12.2020 21:05

Другие вопросы по теме