Проверка столбца данных Pandas на основе иерархии - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть такой фрейм данных

df1 = pd.DataFrame({'Site': ["S1", "S2", "S3", "S4", "S5", "S6","S7","S8","S9"],  
                'Sitelink': [" ","S1","S2","S6","S4"," ","S8"," ","S7"],  
                   'level': ["R", "T", "P", "T", "P", "R","T","R","P"],                     
                  'Weight':["55","55","55","85","85","80","150","190","200"]}) 

столбец «Сайт» будет всегда уникальным

столбец «Ссылка на сайт» захватывает сайт следующего уровня для каждого сайта

столбец 'level' имеет 3 значения - R, T, P, где иерархия R

столбец 'Weight' может принимать любое значение.

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

Output Dataframe

Я пытаюсь зациклить кадр данных и сравнить каждый сайт с следующим уровнем.Есть ли лучший подход для этого?

1 Ответ

0 голосов
/ 23 ноября 2018

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

Код для одной строки будет:

def is_error(row):
    if row['Sitelink'] == " ":
        return 'No Error'
    site_link = df.loc[df['Site'] == row['Sitelink']]
    if int(row['Weight']) <= int(site_link['Weight']):
        return 'No Error'
    else:
        return 'Higher than lower'

Поэтому мы можем применить эту строку для каждой строки, используя функцию apply:

df['Error'] = df.apply(is_error, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...