[英]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.