使用 Polars 实现 qcut 功能

leb*_*gue 6 python python-polars

我一直在使用 Polars,但它似乎缺乏 pandas 那样的 qcut 功能。

我不确定原因,但是使用当前可用的 Polars 功能是否可以达到与 pandas qcut 相同的效果?

下面显示了一个关于我可以使用 pandas qcut 做什么的示例。

import pandas as pd

data = pd.Series([11, 1, 2, 2, 3, 4, 5, 1, 2, 3, 4, 5])
pd.qcut(data, [0, 0.2, 0.4, 0.6, 0.8, 1], labels=['q1', 'q2', 'q3', 'q4', 'q5'])
Run Code Online (Sandbox Code Playgroud)

结果如下:

0     q5
1     q1
2     q1
3     q1
4     q3
5     q4
6     q5
7     q1
8     q1
9     q3
10    q4
11    q5
dtype: category
Run Code Online (Sandbox Code Playgroud)

所以,我很好奇如何使用极坐标得到相同的结果?

感谢您的帮助。

jqu*_*ous 9

更新: \n已在0.16.15 版Series.qcutPolars 中添加

\n
data = pl.Series([11, 1, 2, 2, 3, 4, 5, 1, 2, 3, 4, 5])\n \ndata.qcut([0.2, 0.4, 0.6, 0.8], labels=[\'q1\', \'q2\', \'q3\', \'q4\', \'q5\'], maintain_order=True)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (12, 3)\n\xe2\x94\x8c\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\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\x90\n\xe2\x94\x82      \xe2\x94\x86 break_point \xe2\x94\x86 category \xe2\x94\x82\n\xe2\x94\x82 ---  \xe2\x94\x86 ---         \xe2\x94\x86 ---      \xe2\x94\x82\n\xe2\x94\x82 f64  \xe2\x94\x86 f64         \xe2\x94\x86 cat      \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\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\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\xa1\n\xe2\x94\x82 11.0 \xe2\x94\x86 inf         \xe2\x94\x86 q5       \xe2\x94\x82\n\xe2\x94\x82 1.0  \xe2\x94\x86 2.0         \xe2\x94\x86 q1       \xe2\x94\x82\n\xe2\x94\x82 2.0  \xe2\x94\x86 2.0         \xe2\x94\x86 q1       \xe2\x94\x82\n\xe2\x94\x82 2.0  \xe2\x94\x86 2.0         \xe2\x94\x86 q1       \xe2\x94\x82\n\xe2\x94\x82 \xe2\x80\xa6    \xe2\x94\x86 \xe2\x80\xa6           \xe2\x94\x86 \xe2\x80\xa6        \xe2\x94\x82\n\xe2\x94\x82 2.0  \xe2\x94\x86 2.0         \xe2\x94\x86 q1       \xe2\x94\x82\n\xe2\x94\x82 3.0  \xe2\x94\x86 3.6         \xe2\x94\x86 q3       \xe2\x94\x82\n\xe2\x94\x82 4.0  \xe2\x94\x86 4.8         \xe2\x94\x86 q4       \xe2\x94\x82\n\xe2\x94\x82 5.0  \xe2\x94\x86 inf         \xe2\x94\x86 q5       \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\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\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\x98\n
Run Code Online (Sandbox Code Playgroud)\n
\n

旧答案:

\n

据我所知,.qcut()使用了 bin 值的线性分位数?

\n

如果是这样,您可以“手动”实现该部分:

\n
import polars as pl\n\ndata = pl.Series([11, 1, 2, 2, 3, 4, 5, 1, 2, 3, 4, 5])\nbins = [0.2, 0.4, 0.6, 0.8]\nlabels = ["q1", "q2", "q3", "q4", "q5"]\n\npl.cut(data, bins=[data.quantile(val, "linear") for val in bins], labels=labels)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (12, 3)\n\xe2\x94\x8c\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\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\x90\n\xe2\x94\x82      | break_point | category \xe2\x94\x82\n\xe2\x94\x82 ---  | ---         | ---      \xe2\x94\x82\n\xe2\x94\x82 f64  | f64         | cat      \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\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\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\xa1\n\xe2\x94\x82 1.0  | 2.0         | q1       \xe2\x94\x82\n\xe2\x94\x82 1.0  | 2.0         | q1       \xe2\x94\x82\n\xe2\x94\x82 2.0  | 2.0         | q1       \xe2\x94\x82\n\xe2\x94\x82 2.0  | 2.0         | q1       \xe2\x94\x82\n\xe2\x94\x82 2.0  | 2.0         | q1       \xe2\x94\x82\n\xe2\x94\x82 3.0  | 3.6         | q3       \xe2\x94\x82\n\xe2\x94\x82 3.0  | 3.6         | q3       \xe2\x94\x82\n\xe2\x94\x82 4.0  | 4.8         | q4       \xe2\x94\x82\n\xe2\x94\x82 4.0  | 4.8         | q4       \xe2\x94\x82\n\xe2\x94\x82 5.0  | inf         | q5       \xe2\x94\x82\n\xe2\x94\x82 5.0  | inf         | q5       \xe2\x94\x82\n\xe2\x94\x82 11.0 | inf         | q5       \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\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\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\x98\n
Run Code Online (Sandbox Code Playgroud)\n