繁体   English   中英

pd.cut 可以同时使用区间范围和标签吗?

[英]Can pd.cut use interval range and labels together?

我正在摆弄这样的东西。

bins = [0, .25, .5, .75, 1, 1.25, 1.5, 1.75, 2]
labels = ['0', '.25', '.5', '.75', '1', '1.25', '1.5', '1.75', '2']
dataset['RatingScore'] = pd.cut(dataset['Rating'], bins, labels)

我实际得到的是一个范围,像这样: (0.75, 1.0]

我想得到这样的结果: .75 or 1 or 1.25

是否有可能得到一个特定的数字而不是一个范围? 谢谢。

安迪,你的代码运行了,它给了我实际的数字,而不是范围,但我也看到了很多差距。

在此处输入图像描述

您将labels传递给pd.cut的第三个参数。 pd.cut的第三个参数是right=... 它接受True/False作为值。 labels是非空列表,因此它被认为是True 因此, pd.cut在没有标签的情况下执行。 您需要使用关键字参数将列表labels正确指定为pd.cut的标签。 另一件事, bins的数量必须比labels多一个项目。 您需要将np.inf添加到列表bins的右侧

s = pd.Series([0.2, 0.6, 0.1, 0.9, 2])
bins = [0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, np.inf]
labels = ['0', '.25', '.5', '.75', '1', '1.25', '1.5', '1.75', '2']

s_cat = pd.cut(s, bins=bins, labels=labels)

Out[1165]:
0       0
1      .5
2       0
3     .75
4    1.75
dtype: category
Categories (9, object): [0 < .25 < .5 < .75 ... 1.25 < 1.5 < 1.75 < 2]

如果您不向垃圾箱添加无穷大,您将获得尽可能多的输出浮点数( np.nan )或间隔让你说你想采用正确的间隔你可以尝试如下

import pandas as pd
import numpy as np

def fun(x):
    if isinstance(x, float) is True:
        return np.nan
    else:
        return x.right

df = pd.DataFrame({"Rating":[.1* i for i in range(10)]})
bins = [0, .25, .5, .75, 1, 1.25, 1.5, 1.75, 2]
df["RatingScore"] = pd.cut(df['Rating'], bins)

df["RatingScore"].apply(fun)

0     NaN
1    0.25
2    0.25
3    0.50
4    0.50
5    0.50
6    0.75
7    0.75
8    1.00
9    1.00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM