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