zen*_*elb 10 python python-polars
有没有一种优雅的方法来重新编码极坐标数据框中的值。
例如
1->0,
2->0,
3->1...
Run Code Online (Sandbox Code Playgroud)
在 Pandas 中,它很简单:
df.replace([1,2,3,4,97,98,99],[0,0,1,1,2,2,2])
Run Code Online (Sandbox Code Playgroud)
rit*_*e46 25
由于polars >=0.16.4有一个map_dict表达。
df = pl.DataFrame({\n "a": [1, 2, 3, 4, 5]\n})\n\nmapper = {\n 1: 0,\n 2: 0,\n 3: 10,\n 4: 10\n}\n\ndf.select(\n pl.all().map_dict(mapper, default=pl.col("a"))\n)\nRun Code Online (Sandbox Code Playgroud)\nshape: (5, 1)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x82 10 \xe2\x94\x82\n\xe2\x94\x82 10 \xe2\x94\x82\n\xe2\x94\x82 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\x98\nRun Code Online (Sandbox Code Playgroud)\n在极坐标中,您可以构建if else statetements称为if -> then -> otherwise表达式的柱状。
假设我们有这个DataFrame。
shape: (5, 1)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x82 10 \xe2\x94\x82\n\xe2\x94\x82 10 \xe2\x94\x82\n\xe2\x94\x82 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\x98\nRun Code Online (Sandbox Code Playgroud)\n我们希望将它们替换为以下值:
\ndf = pl.DataFrame({\n "a": [1, 2, 3, 4, 5]\n})\nRun Code Online (Sandbox Code Playgroud)\n我们可以写:
\nfrom_ = [1, 2]\nto_ = [99, 12]\nRun Code Online (Sandbox Code Playgroud)\nshape: (5, 1)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 99 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 12 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 3 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 4 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 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\x98\n\nRun Code Online (Sandbox Code Playgroud)\n现在,快速编写变得非常乏味,因此我们可以编写一个生成这些表达式以供使用的函数,我们是程序员不是吗!
\n因此,要替换为您建议的值,您可以这样做:
\ndf.with_column(\n pl.when(pl.col("a") == from_[0])\n .then(to_[0])\n .when(pl.col("a") == from_[1])\n .then(to_[1])\n .otherwise(pl.col("a")).alias("a")\n)\nRun Code Online (Sandbox Code Playgroud)\n哪个输出:
\nshape: (5, 1)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 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\x98\nRun Code Online (Sandbox Code Playgroud)\n