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

Python Polars:如何修改DataFrame中Series的每隔n个元素?

Polars DataFrame 修改指定Series中每隔n个元素的方法

在Polars中直接使用df["a", 1::2] *= -1这种索引赋值会报错,因为Polars DataFrame的__setitem__不支持这种列+切片的组合赋值语法。以下是几种可行的解决方法:

方法1:通过行号条件判断(推荐,符合Polars表达式风格)

利用Polars的表达式系统,通过行号筛选目标位置并修改:

import polars as pl

df = pl.DataFrame(pl.Series("a", [1, -1, 1, -1, 1]))

# 修改从索引1开始、步长为2的元素(即第2、4个元素,索引从0开始)
df = df.with_columns(
    pl.when(pl.int_range(0, pl.count()) % 2 == 1)
    .then(pl.col("a") * -1)
    .otherwise(pl.col("a"))
    .alias("a")
)

print(df)
# 输出结果:
# shape: (5, 1)
# ┌─────┐
# │ a   │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 1   │
# │ 1   │
# │ 1   │
# │ 1   │
# │ 1   │
# └─────┘

说明:pl.int_range(0, pl.count())生成与数据行数一致的行号序列,通过% 2 == 1筛选出每隔2个的目标行,对这些行的元素执行乘-1操作,其余行保留原数值。

方法2:修改Series后替换列

先提取目标Series,对Series做切片修改,再将修改后的Series放回DataFrame:

import polars as pl

df = pl.DataFrame(pl.Series("a", [1, -1, 1, -1, 1]))

# 提取Series并修改指定切片
s = df["a"]
s[1::2] *= -1

# 替换原列
df = df.with_columns(s.alias("a"))

说明:Polars的Series支持切片索引修改,因此可以先单独处理Series,再更新回DataFrame。

方法3:原地修改(适合需要复用原DataFrame对象的场景)

如果需要原地修改DataFrame,可以使用update方法结合表达式定位目标行:

import polars as pl

df = pl.DataFrame(pl.Series("a", [1, -1, 1, -1, 1]))

# 原地修改目标位置的元素
df.update(
    pl.col("a") * -1,
    filter=pl.int_range(0, pl.count()) % 2 == 1
)

说明:update方法的filter参数用于指定要修改的行,仅满足条件的行会被更新。

内容的提问来源于stack exchange,提问作者FObersteiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:20:22