如果我想将超过阈值的某些值分组在一起,而所有其他箱子都具有相同的模式,那么最有效的方法是什么
bins = [i for i in range(0,600,30)]
df['bins'] = pd.cut(df.Minutes,bins)
我想将分钟列中的值以30分钟为一组进行分组,但600分钟之后的任何值都被分组为单独的分组。
编辑:现在,以下代码df['bins'] = pd.cut(df.Minutes,bins)
将每30分钟分组到600,任何超过该阈值的都将被归类为nan。目标是让这些nan成为定义超过600的任何东西的类别。
这就是我做你要求的方式(如果我理解正确的话)。现在可能有更好的方法,因为这至少有几年的历史了。
本质上,您需要修改您的输入列表(df.Minutes),以便将超过阈值的任何内容更改为单个数字,并将其收集到单个bin中。
例如,它接受0到7的范围,并改变4以上的数字。
np.where(np.arange(8) > 4, 5, np.arange(8))
array([0, 1, 2, 3, 4, 5, 5, 5])
再说一遍,如果我理解正确的话,你的分钟数可能从1到749:
df = pd.DataFrame({'Minutes':range(1,750)})
可以这样做,注意第20行有150个计数
bins = [i for i in range(0,660,30)]
pd.DataFrame(np.histogram(np.where(df['Minutes'] > 600, 601, df['Minutes']), bins=bins)).T.rename(columns={0:'count', 1: 'bin_left_edge'})
count bin_left_edge
0 29.0 0.0
1 30.0 30.0
2 30.0 60.0
3 30.0 90.0
4 30.0 120.0
5 30.0 150.0
6 30.0 180.0
7 30.0 210.0
8 30.0 240.0
9 30.0 270.0
10 30.0 300.0
11 30.0 330.0
12 30.0 360.0
13 30.0 390.0
14 30.0 420.0
15 30.0 450.0
16 30.0 480.0
17 30.0 510.0
18 30.0 540.0
19 30.0 570.0
20 150.0 600.0
21 NaN 630.0