Чтобы найти положение строки на основе двух значений столбца - PullRequest
0 голосов
/ 10 октября 2019

У меня есть 2 столбца в кадре данных, который выглядит следующим образом:

report  pname
 D      Singapore
 N      Pradip
 A      
 S      Singapore
 D
 y      Europe

Я выполняю проверку значений столбца. В отчете столбца допустимыми значениями могут быть D, N и A, и если другиечем эти значения возникают, он выдает ошибку и индекс.

Но теперь я хочу выполнить проверку одновременно для двух столбцов (report, pname). Если в отчете есть значения D и A, столбец не должен быть пустым (нулевым). Если для отчета значения столбца D и A равны нулю, это должно привести к ошибке.

Код, который я сделал, предназначен дляпроверка одного столбца.

lst=list(df['report'])
lst
lst1=['D','N','A']

def valid_reportype(v, lst):
    if v in lst1:
       return True
    return False
for i, v in enumerate(lst):
    if not valid_reportype(v, lst):
       print(f"value {v} at index {i} for column Reporting_Type is Invalid")

Мой код просто выполняет проверку одного столбца, который отличается от значений D, N, A, он выдает ошибку.

Я хотел проверить дваЗначения столбца одновременно, то есть D, и A - это значение, значение столбца pname не должно быть нулевым. Если оно должно выдать ошибку.

1 Ответ

1 голос
/ 10 октября 2019

Почему бы не получить все плохие записи сразу pandas способом с:

invalid_lines = df[~df['report'].isin(lst1) | (pd.isna(df['pname']) & df['report'].isin(['A', 'D']))]

Тогда вы можете распечатать их с помощью:

for i in range(len(invalid_lines)):
    print("value " + str(invalid_lines.iloc[i, 0]) + " at index " + str(invalid_lines.index[i]) + " for column Reporting_Type is Invalid")
...