簡體   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