这是一个示例数据集。假设有许多其他记录和许多客户记录。
customers = ['a','a','a','a','b','b','b','c','c','c']
level = [10,15,30,49,12,15,49,9, 22, 49]
cars = ['bmw','audi','vw','mercedes','bmw','bmw','audi','audi', 'bmw', 'audi']
df = pd.DataFrame({'customers' : customers, 'levels' : level, 'cars': cars})
我想算一下:
这似乎涉及嵌套组,然后计入分组的一个级别,但我陷入困境。也许只需使用具有聚合函数的数据透视表作为计数
答案 0 :(得分:1)
没有承诺这是最简单的方式,但我认为你可以通过两个小组获得你想去的地方,并且cut
可以获得等级:
df["lev"] = pd.cut(df.levels, bins=range(0,100,10), right=False)
dc = df.groupby(["customers", "lev"]).size().reset_index(name="count")
dfinal = dc.groupby(["lev", "count"]).size()
产生
>>> dfinal
lev count
[0, 10) 1 1
[10, 20) 2 2
[20, 30) 1 1
[30, 40) 1 1
[40, 50) 1 3
dtype: int64
一步一步,如果我们添加级别箱:
>>> df["lev"] = pd.cut(df.levels, bins=range(0,100,10), right=False)
>>> df
cars customers levels lev
0 bmw a 10 [10, 20)
1 audi a 15 [10, 20)
2 vw a 30 [30, 40)
3 mercedes a 49 [40, 50)
4 bmw b 12 [10, 20)
5 bmw b 15 [10, 20)
6 audi b 49 [40, 50)
7 audi c 9 [0, 10)
8 bmw c 22 [20, 30)
9 audi c 49 [40, 50)
然后我们可以对customers
和lev
进行分组,以确定每组中有多少辆汽车:
>>> dc = df.groupby(["customers", "lev"]).size().reset_index(name="count")
>>> dc
customers lev count
0 a [10, 20) 2
1 a [30, 40) 1
2 a [40, 50) 1
3 b [10, 20) 2
4 b [40, 50) 1
5 c [0, 10) 1
6 c [20, 30) 1
7 c [40, 50) 1
从中我们可以计算出一定数量的lev / count对的客户数量:
>>> dfinal = dc.groupby(["lev", "count"])["customers"].size()
>>> dfinal
lev count
[0, 10) 1 1
[10, 20) 2 2
[20, 30) 1 1
[30, 40) 1 1
[40, 50) 1 3
dtype: int64