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,我想知道这个用例中的确切含义。任何有用的答案将不胜感激!
如何计算表达式内 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) 我想使用字典通过唯一列值将单个 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) 我有一个极坐标数据框\xc2\xa0,看起来像:
\ndf = pl.DataFrame({"bid": [1, 2, 3], "fid": [4, 5, 6]})\nRun Code Online (Sandbox Code Playgroud)\n我想将两列按行组合成一个元组,以便结果如下所示:
\npl.DataFrame({"bfid": [(1, 4), (2, 5), (3, 6)]})\nRun Code Online (Sandbox Code Playgroud)\n我尝试这样做:df2.with_columns(pl.map([\'bid\', \'fid\'], lambda x: (x[0], x[1])))这是错误的,但如果我尝试扩展到大型数据集,速度也会很慢。
有没有更好的方法来进行这种类型的数据操作?最终结果应该是:
\n\n假设我有
\ndf = pl.DataFrame({\n "date": pl.Series(["2022-01-01", "2022-01-02"]).str.strptime(pl.Date), "%Y-%m-%d")\n})\nRun Code Online (Sandbox Code Playgroud)\n如何将其本地化为特定时区并使其成为日期时间?
\n我试过:
\ndf.select(pl.col('date').cast(pl.Datetime(time_zone='America/New_York')))\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n所以看起来它是从假设 na\xc3\xafve 日期时间是 UTC 开始的,然后应用转换。我设置了os.environ['TZ']='America/New_York',但得到了相同的结果。
我查看了 API 指南中的 Polars 配置选项,看看是否还有其他需要设置的内容,但找不到有关默认时区的任何信息。
\n我是 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)
现在我想知道我们如何在极坐标数据框中做同样的事情。
我的工作有 df 3 个主要列:cid1, cid2, cid3,以及更多 7 个列cid4, cid5, etc。
cid1是cid2,int另一列是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 列:cid1、cid2,并在不是最大值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 功能?
在 …
我正在考虑在一个允许用户输入谓词表达式来过滤/子集数据行的工具中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)
但是,我希望能够分别使用以下字符串表达式,以便该工具的用户(当前使用 …
有没有一种有效的方法来获取日期列上的月结束日期。就像如果 date =\xe2\x80\x982023-02-13\xe2\x80\x9d 返回 \xe2\x80\x9c2023-02-28\xe2\x80\x9d 一样,月初也很好。 \n谢谢!
\ndf = 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\nRun Code Online (Sandbox Code Playgroud)\n两个新的专栏就完美了。
\n