熊猫集团的范围

时间:2020-04-08 04:37:18

标签: python pandas pandas-groupby

我有一个数据

{a : 100, b:102, c:500, d:99, e:78, d:88}

我想按间隔为100的范围对其进行分组。

示例:

{ 100: 2, 0: 3, 500:1 }

是英语

  1. 2次占用100..199之间的数字
  2. 1次出现在500..599之间的数字
  3. 3次占用0..99之间的数字

如何用大熊猫表达?

2 个答案:

答案 0 :(得分:3)

IIUC,按范围分组通常为pd.cut

d = {'a' : 100, 'b':102,'c':500, 'd':99, 'e':78, 'd':88}
bins = np.arange(0,601,100)
pd.cut(pd.Series(d), bins=bins, labels=bins[:-1], right=False).value_counts(sort=False) 

输出:

0      3
100    2
200    0
300    0
400    0
500    1
dtype: int64

更新:实际上,pd.cut似乎过分杀人,您的案件也容易一些了:

(pd.Series(d)//100).value_counts(sort=False)

输出:

0    3
1    2
5    1
dtype: int64

答案 1 :(得分:2)

用于回收箱的最大值为Series的解决方案,用于标记cut中所有值不最后为b[:-1]的标签,然后按GroupBy.size计算值:

d = {'a' : 100, 'b':102, 'c':500, 'd':99, 'e':78, 'f':88}

s = pd.Series(d)

max1 = int(s.max() // 100 + 1) * 100
b = np.arange(0, max1 + 100, 100)
print (b)
[  0 100 200 300 400 500 600]

d1 = s.groupby(pd.cut(s, bins=b, labels=b[:-1], right=False)).size().to_dict()
print (d1)
{0: 3, 100: 2, 200: 0, 300: 0, 400: 0, 500: 1}