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
我刚刚一直在玩 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