lmo*_*csi 3 python python-polars
假设我们在极坐标(python)中有这个数据框:
import polars as pl
df = pl.DataFrame(
{
"era": ["01", "01", "02", "02", "03", "03"],
"pred": [3,5,6,8,9,1]
}
)
Run Code Online (Sandbox Code Playgroud)
我可以根据一列创建排名/行号,例如:
df.with_columns(rn = pl.col("era").rank("ordinal"))
Run Code Online (Sandbox Code Playgroud)
但如果我想基于两列来完成它,它就不起作用:
df.with_columns(rn = pl.col(["era","pred"]).rank("ordinal"))
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
ComputeError: The name: 'rn' passed to `LazyFrame.with_columns` is duplicate
Error originated just after this operation:
DF ["era", "pred"]; PROJECT */2 COLUMNS; SELECTION: "None"
Run Code Online (Sandbox Code Playgroud)
关于如何执行此操作有什么建议吗?
在一次pl.col调用中使用多个选择器:
pl.col("one", "two").function()\nRun Code Online (Sandbox Code Playgroud)\n本质上是以下的简写:
\npl.col("one").function(), pl.col("two").function()\nRun Code Online (Sandbox Code Playgroud)\n您可以使用pl.struct将多个列“组合/分组”在一起:
\n>>> df.with_columns(rn = pl.struct("era", "pred"))\nshape: (6, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\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 era \xe2\x94\x86 pred \xe2\x94\x86 rn \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 i64 \xe2\x94\x86 struct[2] \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\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 01 \xe2\x94\x86 3 \xe2\x94\x86 {"01",3} \xe2\x94\x82\n\xe2\x94\x82 01 \xe2\x94\x86 5 \xe2\x94\x86 {"01",5} \xe2\x94\x82\n\xe2\x94\x82 02 \xe2\x94\x86 6 \xe2\x94\x86 {"02",6} \xe2\x94\x82\n\xe2\x94\x82 02 \xe2\x94\x86 8 \xe2\x94\x86 {"02",8} \xe2\x94\x82\n\xe2\x94\x82 03 \xe2\x94\x86 9 \xe2\x94\x86 {"03",9} \xe2\x94\x82\n\xe2\x94\x82 03 \xe2\x94\x86 1 \xe2\x94\x86 {"03",1} \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\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然后你可以.rank
>>> df.with_columns(rn = pl.struct("era", "pred").rank("ordinal"))\nshape: (6, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 era \xe2\x94\x86 pred \xe2\x94\x86 rn \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 i64 \xe2\x94\x86 u32 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 01 \xe2\x94\x86 3 \xe2\x94\x86 1 \xe2\x94\x82\n\xe2\x94\x82 01 \xe2\x94\x86 5 \xe2\x94\x86 2 \xe2\x94\x82\n\xe2\x94\x82 02 \xe2\x94\x86 6 \xe2\x94\x86 3 \xe2\x94\x82\n\xe2\x94\x82 02 \xe2\x94\x86 8 \xe2\x94\x86 4 \xe2\x94\x82\n\xe2\x94\x82 03 \xe2\x94\x86 9 \xe2\x94\x86 6 \xe2\x94\x82\n\xe2\x94\x82 03 \xe2\x94\x86 1 \xe2\x94\x86 5 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\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