【发布时间】:2020-09-01 07:35:09
【问题描述】:
这个问题已经有了一些变化,但我找不到我正在寻找的确切内容。
我有一个包含他们购买的产品的客户数据框:
customer product
0 John Milk
1 John Milk
2 John Shoes
3 John Shoes
4 John Shoes
5 John Bread
6 Mary Milk
7 Mary Milk
8 Mary Milk
9 Mary Milk
10 Mary Milk
11 Mary Milk
12 Mary Shoes
13 Mary Shoes
14 Joe Bread
15 Joe Bread
16 Joe Bread
17 Joe Bread
18 Joe Milk
19 Joe Milk
20 Joe Milk
21 Joe Fruit
22 Joe Fruit
23 Joe Shoes
24 Joe Shoes
25 Joe Shoes
26 Joe Beer
27 Joe Beer
28 Joe Beer
29 Joe Beer
注意:在完整的数据框中,客户拥有数百种产品,因此不能只是列中的简单连接/产品集。
我想为每个客户获取前 5 种产品 (value_counts()),并将产品名称放在单独的列中。不是产品的计数,只是产品名称(价值 couts 的索引),以及价值计数的正确顺序。
我的目标是拥有这样的数据框:
customer Top 5
0 John Shoes Milk Bread
1 Mary Milk Shoes
2 Joe Bread Beer Milk Shoes Fruit
我认为我在这条线上走对了,我可以看到每个客户的 Top 5 产品:
newdf.groupby('customer')['product'].value_counts()
customer product
Joe Beer 4
Bread 4
Milk 3
Shoes 3
Fruit 2
John Shoes 3
Milk 2
Bread 1
Mary Milk 6
Shoes 2
我只是无法以我喜欢的格式从此数据框中提取信息。我曾尝试重置索引和切片等,但我似乎无法正确处理。
【问题讨论】:
-
为什么不直接遍历组呢? groupby 客户和产品,对其进行排序,然后遍历前五个组