Изменение содержимого столбца Pandas на основе другого столбца - PullRequest
0 голосов
/ 09 июля 2020

У меня есть pandas фрейм данных, подобный следующему:

Neighborhood      High School      ...
WOODLEY           LIBERTY
WOODLEY 
COUNTRY CLUB  
COUNTRY CLUB      HERITAGE
COUNTRY CLUB      HERITAGE
COUNTRY CLUB      TUSCORORA
...

Как видите, некоторые записи либо пустые, либо неправильные, поэтому я пытаюсь исправить их. Я начал с создания функции, подобной следующей.

def cleanHS(dat):
    if dat.Neighborhood == "WOODLEY":
        dat["High School"] == "LIBERTY"
    elif dat.Neighborhood == "COUNTRY CLUB":
        dat["High School"] == "HERITAGE"
    ...

    return dat

Затем я вызываю функцию.

dirty["High School"] = dirty["High School"].map(cleanHS)

Здесь я получаю ошибку атрибута: AttributeError: 'str' object has no attribute 'Neighborhood'

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Здесь нет необходимости в al oop. Вы можете создать словарь пар ключ-значение, начиная с Neighbourhood и сопоставления с исправленными значениями для High School

d = {"WOODLEY": "LIBERTY", "COUNTRY CLUB": "HERITAGE"}
dirty['High School'] = dirty['Neighborhood'].map(d)

Output

Neighborhood      High School
WOODLEY           LIBERTY
WOODLEY           LIBERTY
COUNTRY CLUB      HERITAGE
COUNTRY CLUB      HERITAGE
COUNTRY CLUB      HERITAGE
COUNTRY CLUB      HERITAGE
0 голосов
/ 09 июля 2020

Вот правильный ответ. Использовать словарь для сопоставления легко (как показано в другом ответе).

cleanHS = {"WOODLEY": "LIBERTY", "COUNTRY CLUB": "HERITAGE", ...}

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

dirty["High School"] = dirty["Neighborhood"].map(cleanHS)
...