我有一個資料框,我想根據以下邏輯創建分箱:分箱的閾值為 5。
第一個 bin (bin1) 從第一個標記 m1 開始。然后我們計算下一個標記 m2 的位置差異,它給出 Position(m2) - Position(m1) = 0.5-0 = 0.5。因為差<閾值,所以m2屬于bin1。然后我們移動到下一個標記 m3。我們重復程序 Position(m3) - Position(m1) = 0.6,因為 0.6 < 閾值 m3 屬于 bin1。
我們繼續相同的操作,直到與第一個標記的差異變得大于閾值。因此,由于Position(m6) - Position(m1) = 7,即> threshold,m6 不屬于bin1,成為bin2 的第一個標記。我們重復相同的程序:Position(m7) - Position(m6) = 1.4,即 < 閾值,因此 m7 屬于 bin2。我希望你能明白。
此示例的預期輸出是
bin1 = ['m1','m2','m3','m4','m5'] bin2 = ['m6','m7'] bin3 = ['m8','m9','m10']
有很多關于分箱的問題,答案參考 qcut 和 cut。但我不確定它們是否適用于我的案例,或者我不確定如何將其應用于我的案例。提前感謝您的時間。
df = pd.DataFrame({'Marker': ['m1','m2','m3','m4','m5','m6','m7','m8','m9','m10'],
'Position': [0,0.5,0.6,2,5,7,8.4,15,16,17]})
uj5u.com熱心網友回復:
使用floordiv:
df['Cluster'] = df['Position'].floordiv(5).astype(int).factorize()[0] 1
輸出:
>>> df
Marker Position Cluster
0 m1 0.0 1
1 m2 0.5 1
2 m3 0.6 1
3 m4 2.0 1
4 m5 5.0 2
5 m6 7.0 2
6 m7 8.4 2
7 m8 15.0 3
8 m9 16.0 3
9 m10 17.0 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347937.html
上一篇:使用“查詢”httpapi后獲取{"code":"unauthorized","message":"unauthorizedacc
