在pandas的单独列中分配2的次方范围

时间:2018-11-15 09:56:48

标签: pandas dataframe

我有一列如下所示的值:

col
12
76
34

我需要为其生成一个带有col1的存储桶标签的新列,如下所述:

col1     bucket-labels
12            8-16
76            64-128 
34            32-64

此处列中的值可能会有所不同,结果的数量也会有所变化。

编辑: 桶标签的间隔应在2 ^ n

范围内

2 个答案:

答案 0 :(得分:5)

首先从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

答案 1 :(得分:2)

pd.cutmaxLength箱一起使用:

2 power