【问题标题】:To find the position of row based on two column values根据两列值查找行的位置
【发布时间】:2019-10-10 09:37:25
【问题描述】:

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

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

我正在对列值执行验证。在列报告中,有效值可以是 D、N 和 A,如果出现这些值以外的值,则会产生错误和索引。

但现在我想同时在两列(报告,pname)上执行验证。如果报告具有值 D 和 A,则该列不应为空(null)。如果报告的 D 和 A 列值为 null,则应生成错误。

我所做的代码是用于一列验证。

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 列值不应为空的值。如果是它应该产生错误。

【问题讨论】:

    标签: python python-3.x list if-statement python-3.6


    【解决方案1】:

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

    【讨论】:

    • 它有效,但对于 pname 列,我只想检查 D 和 A ......如果值为 D 和 A,则 pname 不能为空@Aryerez
    • 你能告诉我如何在函数@Aryerez 中进行此操作
    • @arpita 所以如果report 列中有N,那么pname 可以为空吗?
    • 你能告诉我如何在函数中处理这些逻辑.....bcz我想在哪些行上显示它不满足@Aryerez
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2015-03-24
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多