Pandas 剪切并指定特定的 bin 大小

Pandas cut and specifying specific bin sizes

我刚刚一直在玩 cut 并指定特定的 bin 大小,但有时我在 bin 中得到的数据不正确。

我想做的是根据数据在我的风险影响矩阵中的位置对数据进行分类。

下面是我用来创建 dataFrame 和分配 bin 和标签的原始代码。

risk = {'Gross Risk': {0: 1, 1: 3, 2: 4, 3: 6, 4: 9, 5: 14, 6: 20, 7: 5, 8: 8, 9: 16, 10: 22, 11: 1, 12: 3, 13: 6, 14: 9, 15: 12, 16: 25}}
df = pd.DataFrame.from_dict(risk)

# Create a list of names we will call the bins
group_names = ['Very Low', 'Low', 'Medium', 'High', 'Very High']

# Specify our bin boundaries
evaluation_bins = [1, 4, 8, 12, 20, 25]

# And stitch it all together
df['Risk Evaluation'] = pd.cut(df['Gross Risk'], bins = evaluation_bins, labels = group_names, include_lowest = True)

这将创建以下输出

根据我的风险矩阵检查它,我可以看到第 6、7、8 和 15 行被错误地分隔。

为了解决这个问题,我重新指定了 Evaluation_Bins 数据。我没有采用 bin 的下限,而是指定了上限。

evaluation_bins = [1, 3, 6, 10, 16, 25]

这给了我想要的结果。但是要么我从根本上误解了如何指定 Pandas 切割边界,我认为我必须指定下限,而不是上限,或者我只是侥幸获得了我想要的结果。

有人可以让我放心,让我知道我是否没有理解固定宽度容器的创建是如何工作的吗?

乖一点:)

更改evaluation_bins并使用right=False作为pd.cut的参数:

evaluation_bins = [1, 4, 8, 12, 20, np.inf]

df['Risk Evaluation2'] = pd.cut(df['Gross Risk'], bins=evaluation_bins, 
                                labels=group_names, include_lowest=True, right=False)
print(df)

# Output
    Gross Risk Risk Evaluation Risk Evaluation2
0            1        Very Low         Very Low
1            3        Very Low         Very Low
2            4        Very Low              Low
3            6             Low              Low
4            9          Medium           Medium
5           14            High             High
6           20            High        Very High
7            5             Low              Low
8            8             Low           Medium
9           16            High             High
10          22       Very High        Very High
11           1        Very Low         Very Low
12           3        Very Low         Very Low
13           6             Low              Low
14           9          Medium           Medium
15          12          Medium             High
16          25       Very High        Very High