bins = np.arange(0, 189, 6)
bins
回傳
array([ 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72,
78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144, 150,
156, 162, 168, 174, 180, 186])
然后我用它來分類一列差異
df['diffs'] = pd.cut(df['differences'], bins =bins)
df.day_diff_range.value_counts()
結果是:
(0, 6] 1744
(6, 12] 1199
(12, 18] 1003
(18, 24] 934
(24, 30] 815
(30, 36] 754
etc
但是,我希望范圍是這樣的: [0, 6], [7, 13], [14, 20] 等等,其中每個 bin 的兩個點都包含在內,并且下一個 bin 將 1 添加到最大值以前的垃圾箱。
uj5u.com熱心網友回復:
可以通過將引數傳遞給方法來將自定義標簽添加到 binned DataFrame 中。檔案參考這里。labelspd.cut()
在下面的示例中,為簡單和清晰起見,labels使用串列理解和zipbin 偏移構建。
此外,我已將 bin 大小增加到 7(從 6),并添加了right=False引數以確保正確的 bin 對齊。
import pandas as pd
import random
# Create a random set of testing values.
random.seed(73)
vals = [random.randint(1,188) for _ in range(1000)]
# Create a testing DataFrame.
df = pd.DataFrame({'vals': vals})
# Create bins and bin labels.
bins = range(0, 189, 7)
labels = [f'[{a},{b-1}]' for a, b in zip(bins, bins[1:])]
# Apply the bins and labels.
pd.cut(df['vals'],
bins=bins,
right=False,
labels=labels).value_counts().sort_index()
示例輸出:
[0,6] 32
[7,13] 39
[14,20] 28
... ...
[161,167] 45
[168,174] 32
[175,181] 33
Name: vals, dtype: int64
未標記的輸出,用于準確性比較。使用相同的陳述句產生,pd.cut(...)沒有引數labels。
[0, 7) 32
[7, 14) 39
[14, 21) 28
... ...
[161, 168) 45
[168, 175) 32
[175, 182) 33
Name: vals, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456673.html
標籤:Python python-3.x 熊猫
