#python #if-statement #conditional-statements
Вопрос:
Привет, у меня есть 2 фрейма данных с несколькими столбцами, но только с отображением соответствующих столбцов:
df1:
Колонка А |
---|
Чарльзбаркли |
Майкл Джордан |
df2:
Колонка А | Колонка В |
---|---|
чарльз Баркли | ДА |
Майкл Джордан | НЕТ |
Я хочу добиться следующего:
- Я хочу сначала сравнить столбец A df1 со столбцом A df2, игнорируя пробел и чувствительный к регистру и делая все строчными без пробела (так что это может быть Майкл Джордан).
- Если столбец B говорит «Нет», я хочу создать новый столбец и вывести только те строки, которые соответствуют имени И имеют » Нет «для столбца B в df2, со словом «Не зарегистрирован» в Python, напечатанным следующим образом:
Колонка А | Результат |
---|---|
майкл Джордан | Не Зарегистрирован |
Как бы я смог добиться этого с помощью кода на Python?
Заранее спасибо.
Ответ №1:
Поскольку вы сказали, что хотите создать новый столбец, я заполнил другие значения противоположным «зарегистрирован».
import pandas as pd df1 = pd.DataFrame({"A": ["CharlesBarkley", "Michael Jordan"]}) df2 = pd.DataFrame({"A": ["charles barkley", "MichaelJordan"], "B": ["Yes", "No"]}) # Create a mask same_name = df1["A"].str.replace(" ", "").str.lower() == df2["A"].str.replace(" ", "").str.lower() df1["result"] = "Registered" # Apply the mask with another mask to the column "result" df1.loc[(same_name amp; (df2["B"] == "No")), "result"] = "Not Registered" print(df1)
Это дает вам:
A result 0 CharlesBarkley Registered 1 Michael Jordan Not Registered
Если вы хотите иметь только те результаты, которые содержат «Не зарегистрированы»,:
df1[df1["result"] == "Not Registered"]