我在熊猫中有以下数据框
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))
但是它不起作用。
答案 0 :(得分:1)
向cut
中添加2个新参数-labels
和right=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