如何用Polars实现类似Pandas df.loc的条件批量行替换
Pandas 实现步骤
- 生成测试数据集
import pandas as pd # 构造测试数据 df_pandas = pd.DataFrame({ 'item_id': ['A', 'B', 'A', 'C', 'B'], 'netsales': [100, 200, 150, 300, 250] })
- 使用
df.loc筛选并修改指定行
# 筛选item_id为'A'的行,修改netsales为120 df_pandas.loc[df_pandas['item_id'] == 'A', 'netsales'] = 120
Polars 正确实现方案
Polars的filter()仅返回筛选后的子集,不会修改原DataFrame。要实现目标操作,需要用条件赋值的方式,以下是两种可行方案:
方法1:生成新的DataFrame(Polars推荐的不可变操作风格)
import polars as pl # 构造测试数据 df_polars = pl.DataFrame({ 'item_id': ['A', 'B', 'A', 'C', 'B'], 'netsales': [100, 200, 150, 300, 250] }) # 条件赋值修改指定行的netsales df_polars_updated = df_polars.with_columns( pl.when(pl.col('item_id') == 'A') .then(pl.lit(120)) .otherwise(pl.col('netsales')) .alias('netsales') )
方法2:原地修改原DataFrame
# 直接覆盖原DataFrame实现修改 df_polars = df_polars.with_columns( pl.when(pl.col('item_id') == 'A') .then(pl.lit(120)) .otherwise(pl.col('netsales')) .alias('netsales') ) # 或使用update方法直接更新指定行 df_polars.update( pl.lit(120), pl.col('item_id') == 'A', 'netsales' )
注意点
Polars的filter()仅提取符合条件的子集,修改该子集不会同步到原DataFrame——这和Pandasloc直接操作原数据的逻辑不同,Polars更倾向于通过生成新对象的方式处理数据修改。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

