如何在Polars中无需循环批量对多列使用when-then-otherwise
高效实现Polars DataFrame批量列修改
当然可以,你可以利用Polars的批量列处理能力,只计算一次判断条件就能完成所有目标列的修改,完全不需要原生Python循环,执行效率更高。
优化后的代码
import polars as pl df = pl.DataFrame({ 'item': ['CASH', 'CHECK', 'DEBT', 'CHECK', 'CREDIT', 'CASH'], 'quantity': [100, -20, 0, 10, 0, 0], 'value': [99, 47, None, 90, None, 120], 'value_other': [97, 57, None, 91, None, 110], 'value_other2': [94, 37, None, 93, None, 115], }) # 定义需要处理的value类列 target_cols = ['value', 'value_other', 'value_other2'] # 只计算一次判断条件 condition = pl.col('value').is_null() & (pl.col('quantity') == 0) # 批量应用逻辑到所有目标列 df = df.with_columns( pl.col(target_cols).when(condition).then(0).otherwise(pl.col(target_cols)) ) print(df)
效果说明
这段代码会输出和你原方案完全一致的结果,但核心优势在于:
- 条件表达式
condition仅计算一次,避免了原方案中每个列重复计算条件的冗余操作 - 通过
pl.col(target_cols)一次性选中所有目标列,用Polars内部的批量处理逻辑替代原生循环,执行效率更高 - 代码结构更简洁,可读性更强
内容的提问来源于stack exchange,提问作者Phil-ZXX
相关产品推荐
相关产品推荐

