在pandas中对数值进行分组

时间:2016-07-19 15:40:54

标签: python pandas

在我的Dataframe我有一列数字值,比方说 - 距离。我想找出哪一组距离(范围)具有最大的记录数(行数)。

做简单: df.distance.count_values()返回:

74         1
90         1
94         1
893        1
889        1
885        1
877        1
833        1
122        1
545        1

我想要实现的是直方图中的桶,所以我期待这样的输出:

900         4 #all values < 900 and > 850
100         3
150         1
550         1
850         1

到目前为止我已经想到的一种方法,但我不认为最好和最优的方法只是找到最大值和最小值,除以我的步骤(在这种情况下为50)然后进行循环检查所有值并分配给适当的组。

还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我建议您执行以下操作,假设您的值列标记为val

import numpy as np
df['bin'] = df['val'].apply(lambda x: 50*np.floor(x/50))

结果如下:

df.groupby('bin')['val'].count()

答案 1 :(得分:0)

感谢EdChum suggestion并基于this示例,我发现,最好的方式(至少对我而言)是做这样的事情:

import numpy as np

step = 50

#...

max_val = df.distance.max()
bins = list(range(0,int(np.ceil(max_val/step))*step+step,step))
clusters = pd.cut(df.distance,bins,labels=bins[1:])