如何通过在python中使用变量来创建不同的范围?

时间:2015-04-03 12:19:43

标签: python

我想知道是否有任何简单的方法来制作范围而不是下面的代码(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中执行上述操作的简单方法

1 个答案:

答案 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