我正在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)版本中没有这种方法.
如果上面的代码有任何改进,我将不胜感激.
提亚