我想知道是否有任何简单的方法来制作范围而不是下面的代码(buckets = np.where ........)。如果有任何简单的方法可以帮助我怎么能我这样做。在下面的代码textdata是我的maindata和userid和smstext是我的变量
从textdata中获取子集
userfreq = textdata[['userid', 'smstext']]
按用户ID计算计数
user_freq = userfreq.groupby('userid').agg(len)
重置索引
user_freq.reset_index(inplace=True)
将sms文本子集化以生成桶
tobebuckets = user_freq['smstext'] #here smstext is nothing but the frequencies of users
制作不同的范围
buckets = np.where(
tobebuckets <= 0, 0,
np.where(
np.logical_and(tobebuckets > 0, tobebuckets <= 10), 10,
np.where(
np.logical_and(tobebuckets > 10,tobebuckets <= 50), 50,
np.where(
np.logical_and(tobebuckets > 50, tobebuckets <= 100), 100,
np.where(
np.logical_and(tobebuckets > 100, tobebuckets <= 500), 500,
np.where(
np.logical_and(tobebuckets > 500, tobebuckets <= 1000),
1000, 1001))))))
先谢谢。请告诉我在python中执行上述操作的简单方法
答案 0 :(得分:0)
您正在寻找digitize
:
import numpy as np
x = np.arange(1500) - 5
top = 1 + x.max()
bins = np.array([0,10,50,100,500,1000,top])
result = bins[np.digitize(x,bins)]
#if you really want 1001 at the top
result = np.where(result==top,1001,result) #or just clip it