gpt4 book ai didi

python - 将 value_counts() 的索引添加到 groupby 中每个组的新列

转载 作者:行者123 更新时间:2023-12-02 06:46:15 25 4
gpt4 key购买 nike

这个问题已经有一些变体,但我找不到我正在寻找的确切内容。

我有一个包含他们购买的产品的客户数据框:

   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() ),并将产品名称放在单独的列中。不是产品的数量,只是产品名称(值(value) couts 的索引),以及值(value)计数的正确顺序。

我的目标是拥有这样的数据框:

  customer                        Top 5
0 John Shoes Milk Bread
1 Mary Milk Shoes
2 Joe Bread Beer Milk Shoes Fruit

我认为这条线走在正确的轨道上,我可以看到每个客户的前 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

我只是无法以我喜欢的格式从此数据框中提取信息。我试过重置索引和切片等,但我似乎无法正确处理。

最佳答案

使用Series.value_counts在 lambda 函数中将索引的前 5 个值与 GroupBy.agg 连接起来:

f = lambda x: ' '.join(x.value_counts().index[:5])
df = (newdf.groupby('customer')['product'].agg(f)
.reset_index(name='Top 5'))
print (df)
customer Top 5
0 Joe Bread Beer Shoes Milk Fruit
1 John Shoes Milk Bread
2 Mary Milk Shoes

如果客户的订单很重要:

f = lambda x: ' '.join(x.value_counts().index[:5])
df = (newdf.groupby('customer', sort=False)['product'].agg(f)
.reset_index(name='Top 5'))
print (df)
customer Top 5
0 John Shoes Milk Bread
1 Mary Milk Shoes
2 Joe Bread Beer Shoes Milk Fruit

关于python - 将 value_counts() 的索引添加到 groupby 中每个组的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61819863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com