我有一列值,如下所示:

col
12
76
34

为此,我需要为 col1 生成一个带有存储桶标签的新列,如下所述:
col1     bucket-labels
12            8-16
76            64-128
34            32-64

这里列中的值可能会有所不同,结果的数量也会有所不同。

编辑:
桶标签的间隔应该在2^n的范围内

最佳答案

首先通过 here 的解决方案之一获取幂 2 的最大值,通过列表理解创建 bin,通过 zip 创建标签并将其传递给 cut 函数:

import math
a = df['col'].max()
bins = [1<<exponent for exponent in range(math.ceil(math.log(a, 2))+1)]
#another solution
#bins = [1<<exponent for exponent in range((int(a)-1).bit_length() + 1)]
print (bins)
[1, 2, 4, 8, 16, 32, 64, 128]

labels = ['{}-{}'.format(i, j) for i, j in zip(bins[:-1], bins[1:])]

df['bucket-labels'] = pd.cut(df['col'], bins=bins, labels=labels)
print (df)
   col bucket-labels
0   12          8-16
1   34         32-64
2   76        64-128

关于pandas - 在 Pandas 的单独列中分配 2 的幂的存储桶范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53316739/

10-12 20:14