You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:28:13