计算两个系列的行最小值?
calculating rowwise minimum of two series?
你好;
有没有函数可以通过计算两个系列的行最小值来生成系列?功能将类似于 np.minimum
a = [1,4,2,5,2]
b= [5,1,4,2,5]
np.minimum(a,b) -> [1,1,2,2,2]
谢谢。
q =df.lazy().with_column(pl.when(pl.col("a")>pl.col("b")).then(pl.col("b")).otherwise(pl.col("a")).alias("minimum"))
df = q.collect()
我没有测试过,但我认为这应该有效
如已接受的答案所述,您可以使用 pl.when -> then -> otherwise
表达式。
如果您有更宽的 DataFrame,可以使用 DataFrame.min()
方法、pl.min
表达式或 pl.fold
进行更多控制。
import polars as pl
df = pl.DataFrame({
"a": [1,4,2,5,2],
"b": [5,1,4,2,5],
"c": [3,2,5,7,2]
})
df.min(axis=1)
这输出:
shape: (5,)
Series: 'a' [i64]
[
1
1
2
2
2
]
最小表达
当给一个 pl.min
多个表达式输入时,最小值是按行而不是按列确定的。
df.select(pl.min(["a", "b", "c"]))
输出:
shape: (5, 1)
┌─────┐
│ min │
│ --- │
│ i64 │
╞═════╡
│ 1 │
├╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌┤
│ 2 │
└─────┘
折叠表达式
或使用 fold
表达式:
df.select(
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), ["a", "b", "c"])
)
shape: (5, 1)
┌─────────┐
│ literal │
│ --- │
│ i64 │
╞═════════╡
│ 1 │
├╌╌╌╌╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
└─────────┘
fold
允许更酷的事情,因为你对表达式进行操作。
例如,我们可以计算平方列的 min
:
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), [pl.all()**2])
或者我们可以计算“a”列的平方根的最小值,并对其余列求平方。
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), [pl.col("a").sqrt(), pl.all().exclude("a")**2])
你懂的。
你好;
有没有函数可以通过计算两个系列的行最小值来生成系列?功能将类似于 np.minimum
a = [1,4,2,5,2] b= [5,1,4,2,5]
np.minimum(a,b) -> [1,1,2,2,2]
谢谢。
q =df.lazy().with_column(pl.when(pl.col("a")>pl.col("b")).then(pl.col("b")).otherwise(pl.col("a")).alias("minimum"))
df = q.collect()
我没有测试过,但我认为这应该有效
如已接受的答案所述,您可以使用 pl.when -> then -> otherwise
表达式。
如果您有更宽的 DataFrame,可以使用 DataFrame.min()
方法、pl.min
表达式或 pl.fold
进行更多控制。
import polars as pl
df = pl.DataFrame({
"a": [1,4,2,5,2],
"b": [5,1,4,2,5],
"c": [3,2,5,7,2]
})
df.min(axis=1)
这输出:
shape: (5,)
Series: 'a' [i64]
[
1
1
2
2
2
]
最小表达
当给一个 pl.min
多个表达式输入时,最小值是按行而不是按列确定的。
df.select(pl.min(["a", "b", "c"]))
输出:
shape: (5, 1)
┌─────┐
│ min │
│ --- │
│ i64 │
╞═════╡
│ 1 │
├╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌┤
│ 2 │
└─────┘
折叠表达式
或使用 fold
表达式:
df.select(
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), ["a", "b", "c"])
)
shape: (5, 1)
┌─────────┐
│ literal │
│ --- │
│ i64 │
╞═════════╡
│ 1 │
├╌╌╌╌╌╌╌╌╌┤
│ 1 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
├╌╌╌╌╌╌╌╌╌┤
│ 2 │
└─────────┘
fold
允许更酷的事情,因为你对表达式进行操作。
例如,我们可以计算平方列的 min
:
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), [pl.all()**2])
或者我们可以计算“a”列的平方根的最小值,并对其余列求平方。
pl.fold(int(1e9), lambda acc, a: pl.when(acc > a).then(a).otherwise(acc), [pl.col("a").sqrt(), pl.all().exclude("a")**2])
你懂的。