如何动态创建熊猫连续变量箱

时间:2019-02-27 07:35:19

标签: python pandas

我在熊猫中有以下数据框

 ID     value
 1      12.34
 2      102.34
 3      99.43
 4      105
 5      110
 6      110.23
 7      0
 8      0.5

我想动态创建5个bin,以下是我想要的数据框

ID     value       bin
 1      12.34      10-15
 2      102.34     100-105
 3      99.43      95-100
 4      105        105-110
 5      110        110-115 
 6      110.23     110-115
 7      0          0-5 
 8      0.5        0-5

我尝试了以下操作,但没有用

s1=((df.value//5)*5).min()
s2=((df.value//5+1)*5).max()
df['bin'] = pd.cut(df.value,np.arange(s1,s2+5,5))

但是它不起作用。

1 个答案:

答案 0 :(得分:1)

cut中添加2个新参数-labelsright=False,以便标签将列表理解与zip一起使用:

s1=((df.value//5)*5).min()
s2=((df.value//5+1)*5).max()

bins = np.arange(s1,s2+5,5)
labels = [f'{int(i)}-{int(j)}' for i, j in zip(bins[:-1], bins[1:])] 

df['bin'] = pd.cut(df.value, bins=bins, labels=labels, right=False)
print (df)
   ID   value      bin
0   1   12.34    10-15
1   2  102.34  100-105
2   3   99.43   95-100
3   4  105.00  105-110
4   5  110.00  110-115
5   6  110.23  110-115
6   7    0.00      0-5
7   8    0.50      0-5