第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python 生成特定長(zhǎng)度的唯一范圍并對(duì)其進(jìn)行分類

Python 生成特定長(zhǎng)度的唯一范圍并對(duì)其進(jìn)行分類

暮色呼如 2022-12-06 16:45:57
我有一個(gè)數(shù)據(jù)框列,它指定用戶執(zhí)行某項(xiàng)活動(dòng)的次數(shù)。例如。>>> df['ActivityCount']Users     ActivityCountUser0     220User1     190User2     105User3     109User4     271User5     265     ...User95     64User96     15User97    168User98    251User99    278Name: ActivityCount, Length: 100, dtype: int32>>> activities = sorted(df['ActivityCount'].unique())[9, 15, 16, 17, 20, 23, 25, 26, 28, 31, 33, 34, 36, 38, 39, 43, 49, 57, 59, 64, 65, 71, 76, 77, 78,83, 88, 94, 95, 100, 105, 109, 110, 111, 115, 116, 117, 120, 132, 137, 138, 139, 140, 141, 144, 145, 148, 153, 155, 157, 162, 168, 177, 180, 182, 186, 190, 192, 194, 197, 203, 212, 213, 220, 223, 231, 232, 238, 240, 244, 247, 251, 255, 258, 260, 265, 268, 269, 271, 272, 276, 278, 282, 283, 285, 290]根據(jù)他們的 ActivityCount,我必須將用戶分為 5 個(gè)不同的類別,例如A, B, C, D和E。活動(dòng)計(jì)數(shù)范圍不時(shí)變化。在上面的例子中,它大約在中間(9-290)(系列的最低和最高),它可以是(5-500)or (5 to 30)。在上面的示例中,我可以將活動(dòng)的最大數(shù)量除以 5,然后將每個(gè)用戶分類在 58 的范圍內(nèi),例如(from 290/5),Range A: 0-58...等Range B: 59-116Range C: 117-174有沒(méi)有其他方法可以使用 pandas 或 numpy 實(shí)現(xiàn)此目的,以便我可以直接對(duì)給定類別中的列進(jìn)行分類?預(yù)期輸出:->>> dfUsers     ActivityCount  Category/Range User0     220             DUser1     190             DUser2     105             B User3     109             BUser4     271             E  User5     265             E     ...User95     64             BUser96     15             AUser97    168             CUser98    251             EUser99    278             E
查看完整描述

2 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

這樣做的自然方法是將數(shù)據(jù)分成 5 個(gè)數(shù)量,然后根據(jù)這些數(shù)量將數(shù)據(jù)分成 bin。幸運(yùn)的是,pandas 可以讓你輕松做到這一點(diǎn):


df["category"] = pd.cut(df.Activity, 5, labels= ["a","b", "c", "d", "e"])

輸出類似于:


    Activity Category

34       115        b

15        43        a

57       192        d

78       271        e

26        88        b

6         25        a

55       186        d

63       220        d

1         15        a

76       268        e

另一種觀點(diǎn)——聚類

在上述方法中,我們將數(shù)據(jù)分成 5 個(gè) bin,其中不同 bin 的大小相等。另一種更復(fù)雜的方法是將數(shù)據(jù)分成 5 個(gè)集群,并旨在使每個(gè)集群中的數(shù)據(jù)點(diǎn)盡可能彼此相似。在機(jī)器學(xué)習(xí)中,這被稱為聚類/分類問(wèn)題。


一種經(jīng)典的聚類算法是k-means。它通常用于具有多個(gè)維度(例如每月活動(dòng)、年齡、性別等)的數(shù)據(jù)。因此,這是一個(gè)非常簡(jiǎn)單的聚類案例。


在這種情況下,可以通過(guò)以下方式進(jìn)行 k-means 聚類:


import scipy

from scipy.cluster.vq import vq, kmeans, whiten


df = pd.DataFrame({"Activity": l})


features = np.array([[x] for x in df.Activity])

whitened = whiten(features)

codebook, distortion = kmeans(whitened, 5) 

code, dist = vq(whitened, codebook)


df["Category"] = code

輸出看起來(lái)像:


    Activity  Category

40       138         1

79       272         0

72       255         0

13        38         3

41       139         1

65       231         0

26        88         2

59       197         4

76       268         0

45       145         1

一些注意事項(xiàng):


類別的標(biāo)簽是隨機(jī)的。在這種情況下,標(biāo)簽“2”指的是比級(jí)別“1”更高的活動(dòng)。

我沒(méi)有將標(biāo)簽從 0-4 遷移到 AE。這可以使用 pandas' 輕松完成map。


查看完整回答
反對(duì) 回復(fù) 2022-12-06
?
慕尼黑的夜晚無(wú)繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

嘗試以下解決方案:

df['Categ'] = pd.cut(df.ActivityCount, bins=5, labels=list('ABCDE'))

它創(chuàng)建Categ列 - 將ActivityCount 劃分為 5 個(gè)容器的結(jié)果,標(biāo)記為A , ... E。

通過(guò)將整個(gè)范圍劃分為n 個(gè)大小相等的子范圍來(lái)設(shè)置箱的邊界。

您還可以看到每個(gè)垃圾箱的邊界,調(diào)用:

pd.cut(df.ActivityCount, bins=5, labels=list('ABCDE'), retbins=True)[1]


查看完整回答
反對(duì) 回復(fù) 2022-12-06
  • 2 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)