根据两列值查找行的位置

To find the position of row based on two column values

我在数据框中有 2 列,如下所示:

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

我正在对列 values.In 执行验证,该列报告有效值可以是 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 列值不应 null.If 的值,它应该会产生错误。

为什么不以 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")