替换 python 极坐标中的一行

Klu*_*mpi 1 python python-polars

我想用单个值替换极坐标 DataFrame 中的一行:

import numpy as np
import polars as pl

df = np.zeros(shape=(4, 4))
df = pl.DataFrame(df)
Run Code Online (Sandbox Code Playgroud)

例如,我想将索引 1 处的行中的所有值替换为 1.0 。

我一直在文档中寻找一种简单的解决方案,但找不到。

Way*_*shi 5

这是 Polars 中显式索引的反模式。也就是说,通过with_row_count列,可以通过在表达式中使用该额外列when/then(而不是最终select在最终结果中使用它)来创建一个具有行替换值的新 DataFrame:

\n
df.with_row_count().select(\n    pl.when(pl.col("row_nr") == 1)\n      .then(1)\n      .otherwise(pl.col(c))\n    .alias(c) for c in df.columns\n)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (4, 4)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 column_0 \xe2\x94\x86 column_1 \xe2\x94\x86 column_2 \xe2\x94\x86 column_3 \xe2\x94\x82\n\xe2\x94\x82 ---      \xe2\x94\x86 ---      \xe2\x94\x86 ---      \xe2\x94\x86 ---      \xe2\x94\x82\n\xe2\x94\x82 i32      \xe2\x94\x86 i32      \xe2\x94\x86 i32      \xe2\x94\x86 i32      \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x82\n\xe2\x94\x82 1        \xe2\x94\x86 1        \xe2\x94\x86 1        \xe2\x94\x86 1        \xe2\x94\x82\n\xe2\x94\x82 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x82\n\xe2\x94\x82 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x86 0        \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:两项改进:

\n
    \n
  • 还有一个相当新的函数cumcount,可以有效地在基本情况下充当行计数表达式。这使得整个查询\n变得懒惰。
  • \n
  • pl.all可以用来摆脱上面的生成器理解,结合 akeep_name以避免重复的列错误。
  • \n
\n
df.select(\n    pl.when(pl.all().cumcount() == 1)\n      .then(1)\n      .otherwise(pl.all())\n    .keep_name()\n)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (4, 4)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 column_0 \xe2\x94\x86 column_1 \xe2\x94\x86 column_2 \xe2\x94\x86 column_3 \xe2\x94\x82\n\xe2\x94\x82 ---      \xe2\x94\x86 ---      \xe2\x94\x86 ---      \xe2\x94\x86 ---      \xe2\x94\x82\n\xe2\x94\x82 f64      \xe2\x94\x86 f64      \xe2\x94\x86 f64      \xe2\x94\x86 f64      \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x82\n\xe2\x94\x82 1.0      \xe2\x94\x86 1.0      \xe2\x94\x86 1.0      \xe2\x94\x86 1.0      \xe2\x94\x82\n\xe2\x94\x82 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x82\n\xe2\x94\x82 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x86 0.0      \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

(可以从这里将结果转换为任何数据类型)

\n