report = (df.with_row_count("index")
.filter(pl.any(pl.col("*").is_null()) & pl.col("mandatory").eq("M"))
.with_columns(pl.lit("Missing value detected").alias("warning"))
)
Текущее требование заключается в том, что если значение «M» встречается в столбце «обязательный», а в той же строке встречается отсутствующее значение, эта строка добавляется в отчет. Теперь появилось новое дополнительное требование. Я объясню это на примере набора данных. Может быть так, что в столбце «столбец» могут быть одинаковые значения. В данном случае «фу». По первому правилу в отчет должна быть записана строка 2. Однако условие исключения теперь должно предотвратить это. Если уже одна строка не имеет нулей в столбце «столбец», все остальные равные значения в дальнейшем рассмотрении не учитываются. В данном случае строка 1 удовлетворяет этому условию, поэтому вторую строку рассматривать не следует.
В настоящее время я определяю строки с пропущенными значениями и фильтрую их в отчет. Я добавляю индекс и столбец «предупреждение». [code]report = (df.with_row_count("index") .filter(pl.any(pl.col("*").is_null()) & pl.col("mandatory").eq("M")) .with_columns(pl.lit("Missing value detected").alias("warning")) ) [/code] Текущее требование заключается в том, что если значение «M» встречается в столбце «обязательный», а в той же строке встречается отсутствующее значение, эта строка добавляется в отчет. Теперь появилось новое дополнительное требование. Я объясню это на примере набора данных. Может быть так, что в столбце «столбец» могут быть одинаковые значения. В данном случае «фу». По первому правилу в отчет должна быть записана строка 2. Однако условие исключения теперь должно предотвратить это. Если уже одна строка не имеет нулей в столбце «столбец», все остальные равные значения в дальнейшем рассмотрении не учитываются. В данном случае строка 1 удовлетворяет этому условию, поэтому вторую строку рассматривать не следует. [code]df = pl.DataFrame( { "ID": ["1", "1", "1", "1", "1"], "column": ["foo", "foo", "bar", "ham", "egg"], "table": ["A", "B", "C", "D", "E"], "value_a": ["tree", None, None, "bean", None,], "value_b": ["Lorem", "Ipsum", "Dal", "Curry", "Dish",], "mandatory": ["M", "M", "M", "CM", "M"], } ) print(df)
shape: (5, 6) ┌─────┬────────┬───────┬─────────┬─────────┬───────────┐ │ ID ┆ column ┆ table ┆ value_a ┆ value_b ┆ mandatory │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ str ┆ str ┆ str ┆ str ┆ str │ ╞═════╪════════╪═══════╪═════════╪═════════╪═══════════╡ │ 1 ┆ foo ┆ A ┆ tree ┆ Lorem ┆ M │ │ 1 ┆ foo ┆ B ┆ null ┆ Ipsum ┆ M │ │ 1 ┆ bar ┆ C ┆ null ┆ Dal ┆ M │ │ 1 ┆ ham ┆ D ┆ bean ┆ Curry ┆ CM │ │ 1 ┆ egg ┆ E ┆ null ┆ Dish ┆ M │ └─────┴────────┴───────┴─────────┴─────────┴───────────┘ [/code] Ожидаемый отчет должен выглядеть так [code]shape: (2, 8) ┌───────┬─────┬────────┬───────┬─────────┬─────────┬───────────┬────────────────────────┐ │ Index ┆ ID ┆ column ┆ table ┆ value_a ┆ value_b ┆ mandatory ┆ warning │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ i64 ┆ str ┆ str ┆ str ┆ f64 ┆ str ┆ str ┆ str │ ╞═══════╪═════╪════════╪═══════╪═════════╪═════════╪═══════════╪════════════════════════╡ │ 1 ┆ 1 ┆ bar ┆ C ┆ null ┆ Dal ┆ M ┆ Missing value detected │ │ 2 ┆ 1 ┆ egg ┆ E ┆ null ┆ Dish ┆ M ┆ Missing value detected │ └───────┴─────┴────────┴───────┴─────────┴─────────┴───────────┴────────────────────────┘ [/code] Как реализовать дополнительное условие для правильного определения строк с пропущенными значениями?