标签: python-polars

带有空字符串参数的 pl.col("")` 表达式的确切含义是什么

Polars 书中有关“列表上下文”的部分中的示例使用pl.col("")以空字符串""作为参数的表达式。

# the percentage rank expression
rank_pct = pl.col("").rank(reverse=True) / pl.col("").count()
Run Code Online (Sandbox Code Playgroud)

从上下文和输出我可以猜测pl.col("")表达式的作用。但API文档似乎没有涵盖空字符串作为参数的情况pl.col,我想知道这个用例中的确切含义。任何有用的答案将不胜感激!

python-polars

3
推荐指数
1
解决办法
1179
查看次数

如何在Python极坐标表达式中执行元素最大两列?

如何计算表达式内 Polars 中两列的元素最大值?

极地版本 = 0.13.31

问题陈述作为代码:

import polars as pl
import numpy as np
df = pl.DataFrame({
    "a": np.arange(5),
    "b": np.arange(5)[::-1]
})
# Produce a column with the values [4, 3, 2, 3, 4] using df.select([ ... ]).alias("max(a, b)")
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情

Polars 声称支持 numpy 通用函数(docs),其中包括 np.maximum ,它可以满足我的要求。但是,当我尝试这样做时,出现错误。

df.select([
    np.maximum(pl.col("a"), pl.col("b")).alias("max(a, b)")
])
# TypeError: maximum() takes from 2 to 3 positional arguments but 1 were given
Run Code Online (Sandbox Code Playgroud)

似乎没有为此内置的 Polars,pl.max但有,但这仅返回数组中的单个最大元素。

使用.map()

my_df.select([
    pl.col(["a", "b"]).map(np.maximum)
])
# PanicException …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-polars

3
推荐指数
1
解决办法
2519
查看次数

python-polars使用字典按列值将数据帧分割成许多dfs

我想使用字典通过唯一列值将单个 df 拆分为多个 df。下面的代码展示了如何使用 pandas 来完成此操作。我怎样才能在极地中执行以下操作?

import pandas as pd

#Favorite color of 10 people
df = pd.DataFrame({"Favorite_Color":["Blue","Yellow","Black","Red","Blue","Blue","Green","Red","Red","Blue"]})
print(df)

#split df into many dfs by Favorite_Color using dict
dict_of_dfs={key: df.loc[value] for key, value in df.groupby(["Favorite_Color"]).groups.items()}
print(dict_of_dfs)
Run Code Online (Sandbox Code Playgroud)

python pandas python-polars

3
推荐指数
1
解决办法
2814
查看次数

在 Polars Python API 中将两列组合成元组

我有一个极坐标数据框\xc2\xa0,看起来像:

\n
df = pl.DataFrame({"bid": [1, 2, 3], "fid": [4, 5, 6]})\n
Run Code Online (Sandbox Code Playgroud)\n

我想将两列按行组合成一个元组,以便结果如下所示:

\n
pl.DataFrame({"bfid": [(1, 4), (2, 5), (3, 6)]})\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试这样做:df2.with_columns(pl.map([\'bid\', \'fid\'], lambda x: (x[0], x[1])))这是错误的,但如果我尝试扩展到大型数据集,速度也会很慢。

\n

有没有更好的方法来进行这种类型的数据操作?最终结果应该是:

\n

在此输入图像描述

\n

python data-manipulation python-polars

3
推荐指数
1
解决办法
1381
查看次数

如何将日期转换为极坐标中的时区感知日期时间

假设我有

\n
df = pl.DataFrame({\n    "date": pl.Series(["2022-01-01", "2022-01-02"]).str.strptime(pl.Date), "%Y-%m-%d")\n})\n
Run Code Online (Sandbox Code Playgroud)\n

如何将其本地化为特定时区并使其成为日期时间?

\n

我试过:

\n
df.select(pl.col('date').cast(pl.Datetime(time_zone='America/New_York')))\n
Run Code Online (Sandbox Code Playgroud)\n

但这给了我

\n
    shape: (2, 1)\n    date\n    datetime[\xce\xbcs, America/New_York]\n    2021-12-31 19:00:00 EST\n    2022-01-01 19:00:00 EST\n
Run Code Online (Sandbox Code Playgroud)\n

所以看起来它是从假设 na\xc3\xafve 日期时间是 UTC 开始的,然后应用转换。我设置了os.environ['TZ']='America/New_York',但得到了相同的结果。

\n

我查看了 API 指南中的 Polars 配置选项,看看是否还有其他需要设置的内容,但找不到有关默认时区的任何信息。

\n

python python-polars

3
推荐指数
1
解决办法
3017
查看次数

如何用特征的中值填充极坐标数据框中存在的特征的空值?

我是 pandas 用户,但由于 Polars 数据帧相对于 pandas 的优势,我尝试切换到 Polars。当我进行切换时,我遇到了这样的问题:不知道如何根据另一个相关特征值用中值填充特征的空值。

如下图所示:

姓名 互联网电影数据库评分 元分数
8 86
C 8 90
D 8 无效的
8 91
D 7 66
D 3 44

我知道在 pandas 中我们可以做这样的事情来用中值填充“元得分”功能

df.groupby('IMDB Score')['Meta Score'].apply(lambda x: x.fillna(x.median()))

Run Code Online (Sandbox Code Playgroud)

现在我想知道我们如何在极坐标数据框中做同样的事情。

python data-preprocessing python-polars

3
推荐指数
1
解决办法
6386
查看次数

使用 Polars 正确分组和过滤

我的工作有 df 3 个主要列:cid1, cid2, cid3,以及更多 7 个列cid4, cid5, etc

cid1cid2int另一列是float

cid1和的每个组合cid2都是一个包含某些行的工作集,其中所有其他列的值都不同。我想过滤 df 并接收我的 df ,其中仅包含和cid3的每个组合的列中的最大值。下一列必须保持不变。cid1cid2cid4

这段代码帮助我完成了部分任务:

df = (df
    .groupby(["cid1", "cid2"])
    .agg([pl.max("cid3").alias("max_cid3")])
)
Run Code Online (Sandbox Code Playgroud)

它只接收 3 列:cid1cid2,并在不是最大值max_cid3时过滤所有行。cid3但我无法找到如何cid4, etc在不进行更改的情况下接收该行的所有其他列 ( )。

df = (df
    .groupby(["cid1", "cid2"])
    .agg([pl.max("cid3").alias("max_cid3"), pl.col("cid4")])
)
Run Code Online (Sandbox Code Playgroud)

我尝试添加pl.col("cid4")到 aggs 列表,但在列中我看到某些值的不同列表cid4

我怎样才能正确地做到这一点?也许 Polars 有另一种方法可以实现 groupby 功能?

在 …

dataframe python-polars

3
推荐指数
1
解决办法
2547
查看次数

我可以使用类似 pandas 的字符串表达式来过滤 DataFrame 吗?

我正在考虑在一个允许用户输入谓词表达式来过滤/子集数据行的工具中pandas替换我的使用。polars这允许用户使用该pandas.DataFrame.query方法可以解析的表达式,例如"x > 1",作为一个非常简单的示例。

但是,我似乎找不到一种方法来使用相同类型的字符串表达式,以便我可以在不要求用户更改其谓词表达式的情况下polars.DataFrame.filter进行交换。pandaspolars

我发现的唯一接近我的问题的是这个帖子:String as a condition in a filter

不幸的是,这并不是我所需要的,因为它仍然需要一个字符串表达式,"pl.col('x') > 1"而不是简单的"x > 1".

有没有办法使用更简单(“不可知”)的语法polars

使用文档中的示例polars.DataFrame.filter

>>> df = pl.DataFrame(
...     {
...         "foo": [1, 2, 3],
...         "bar": [6, 7, 8],
...         "ham": ["a", "b", "c"],
...     }
... )
Run Code Online (Sandbox Code Playgroud)

调用时df.filter,我被迫使用如下表达式:

pl.col("foo") < 3
(pl.col("foo") < 3) & (pl.col("ham") == "a")
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够分别使用以下字符串表达式,以便该工具的用户(当前使用 …

python-polars

3
推荐指数
1
解决办法
614
查看次数

如何从极地日期计算月份开始和结束月份日期?

有没有一种有效的方法来获取日期列上的月结束日期。就像如果 date =\xe2\x80\x982023-02-13\xe2\x80\x9d 返回 \xe2\x80\x9c2023-02-28\xe2\x80\x9d 一样,月初也很好。 \n谢谢!

\n
df = pl.DataFrame({'DateColumn': ['2022-02-13']})\n\ntest_df = df.with_columns([\n    pl.col('DateColumn').str.strptime(pl.Date).cast(pl.Date)\n]\n)\n\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\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 DateColumn \xe2\x94\x82\n\xe2\x94\x82 ---        \xe2\x94\x82\n\xe2\x94\x82 date       \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\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 2022-02-13 \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\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

两个新的专栏就完美了。

\n

python date python-polars

3
推荐指数
1
解决办法
697
查看次数

在 Polars Dataframe 中创建每行的字典

假设我们有下面给定的数据框。现在,对于每一行,我需要创建字典并将其传递给 UDF 进行一些逻辑处理。有没有办法使用 Polars 或 pyspark 数据帧来实现此目的?

在此输入图像描述

python apache-spark python-polars

3
推荐指数
1
解决办法
2487
查看次数