我想要一个函数,它接受条件列表作为参数,并按所有条件过滤给定的数据帧。 伪代码应该是这样的:
def Filter(df, conditions = ["a","b"]):
conditions_dict = {
"a": pl.col("x") < 5,
"b": pl.col("x") > -3,
"c": pl.col("z") < 7
}
return df.with_columns(
pl.when( any [conditions_dict[c] for c in conditions])
.then(pl.lit(False))
.otherwise(pl.lit(True))
.alias("bool")
)
怎么做?
import polars as pl
def filter_df(df, conditions=["a", "b"]):
conditions_dict = {
"a": pl.col("x") < 5,
"b": pl.col("x") > -3,
"c": pl.col("z") < 7,
}
# Dynamically create the condition using reduce
cond = pl.reduce(lambda a, b: a & b, [conditions_dict[c] for c in conditions])
return df.with_columns(
pl.when(cond)
.then(pl.lit(False))
.otherwise(pl.lit(True))
.alias("bool")
)
# Sample DataFrame
df = pl.DataFrame({"x": [1, 2, 6, 4, -5], "z": [8, 3, 2, 6, 1]})
# Test the function
print(filter_df(df, ["a", "b"]))
说明:
- 动态条件构建:
-
我们使用
pl.reduce(lambda a, b: a & b, [conditions_dict[c] for c in conditions])
来动态地将多个条件组合成一个条件。reduce
函数依次应用lambda
函数,将两个条件使用&
运算符连接起来,最终生成一个组合条件。 -
应用条件:
-
我们在
pl.when(cond)
中使用动态构建的cond
来应用过滤条件。
现在,
filter_df
函数将根据提供的条件列表动态地过滤数据帧。