我正在try 添加一个使用apply/polars的列.pandas的类似功能如下:

>>> import pandas as pd
>>> df = pd.DataFrame({"ref": [-1, 2, 8], "v1": [-1, 5, 0], "v2": [-1, 5, 8]})
>>> df['count'] = df.apply(lambda r: len([i for i in r if i == r[0]]) - 1, axis=1)
>>> df = df.drop('ref', axis=1)
>>> df
   v1  v2  count
0  -1  -1      2
1   5   5      0
2   0   8      1
>>>

以下是我用Polar编写的示例代码.虽然它的效果与预期不谋而合,但它看起来很难看,而且可能还可以改进.

>>> import polars as pl
>>>
>>> df = pl.DataFrame({"ref": [-1, 2, 8], "v1": [-1, 5, 0], "v2": [-1, 5, 8]})
>>>
>>> x = df.apply(lambda r: len([i for i in r if i == r[0]]) - 1).rename({'apply': 'count'})
>>> df = df.hstack([x.to_series()]).drop('ref')
>>>
>>> df
shape: (3, 3)
┌─────┬─────┬───────┐
│ v1  ┆ v2  ┆ count │
│ --- ┆ --- ┆ ---   │
│ i64 ┆ i64 ┆ i64   │
╞═════╪═════╪═══════╡
│ -1  ┆ -1  ┆ 2     │
│ 5   ┆ 5   ┆ 0     │
│ 0   ┆ 8   ┆ 1     │
└─────┴─────┴───────┘
>>>

让我烦恼的是重命名部分和我拼凑在一起的hstack.我见过一些使用.with_column()的例子,但在我的Polars(0.17.14)版本中没有这种方法.

如果上面的代码有任何改进,我将不胜感激.

提亚

推荐答案

以前,.with_column.with_columns都存在,现在只有.with_columns.

ref和另一列具有相同的值时,看起来您似乎在try 计数.

您可以直接使用极点中的表达式执行此操作:

df.with_columns(count = pl.sum(pl.col('ref') == pl.exclude('ref')))
shape: (3, 4)
┌─────┬─────┬─────┬───────┐
│ ref ┆ v1  ┆ v2  ┆ count │
│ --- ┆ --- ┆ --- ┆ ---   │
│ i64 ┆ i64 ┆ i64 ┆ u32   │
╞═════╪═════╪═════╪═══════╡
│ -1  ┆ -1  ┆ -1  ┆ 2     │
│ 2   ┆ 5   ┆ 5   ┆ 0     │
│ 8   ┆ 0   ┆ 8   ┆ 1     │
└─────┴─────┴─────┴───────┘

Python相关问答推荐

将从Python接收的原始字节图像数据转换为C++ Qt QIcon以显示在QStandardProject中

将行从一个DF添加到另一个DF

Pandas :多索引组

即使在可见的情况下也不相互作用

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

比较2 PD.数组的令人惊讶的结果

未删除映射表的行

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

在Mac上安装ipython

DataFrames与NaN的条件乘法

将9个3x3矩阵按特定顺序排列成9x9矩阵

我如何根据前一个连续数字改变一串数字?

如何根据一列的值有条件地 Select 前N组?

Plotly Dash Creating Interactive Graph下拉列表

需要帮助重新调整python fill_between与数据点

在matplotlib中删除子图之间的间隙_mosaic

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

Flask Jinja2如果语句总是计算为false&

处理Gekko的非最优解

如何获得3D点的平移和旋转,给定的点已经旋转?