排序值时理解groupby()函数

2024-09-28 23:21:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用groupby()函数对数据进行分组,以查看整个数据集中最昂贵的产品及其所属的类别。我想知道,例如,最昂贵的产品是否属于“手表”或“珠宝”类别,或者可能属于前10个最昂贵的类别。我在实现它时遇到了困难,最后使用了:

df[['retail_price', 'product_category_tree']].groupby('retail_price').max().sort_values(by='retail_price', ascending=False)

唯一的问题是,虽然我使用了max()使使用sort_values()成为可能,但我不确定这个max()在这里到底做了什么。乍一看,结果似乎达到了我的预期,但我想问你我是否正确

这是我得到的结果:

retail_price   product_category_tree
    
571230.0    ["Watches >> Wrist Watches >> Breitling Wrist ...
250500.0    ["Furniture >> Living Room >> Sofas & Sectiona...
217500.0    ["Furniture >> Living Room >> Sofas & Sectiona...
204600.0    ["Furniture >> Living Room >> Sofas & Sectiona...
201000.0    ["Watches >> Wrist Watches >> Cartier Wrist Wa...
... ...
59.0        ["Toys & School Supplies >> School Supplies >>...
55.0        ["Pens & Stationery >> Office Supplies >> File...
49.0        ["Pens & Stationery >> School Supplies >> Penc...
36.0        ["Home Improvement >> Electricals >> Switches ...
35.0        ["Kitchen & Dining >> Housekeeping & Laundry >..

这个结果是否向我展示了最昂贵的产品及其类别?或者这个max()在这里做了什么?如果是,我可以用什么来代替

我也很感激任何关于如何更改此函数以同时显示一个额外列item_name的建议,但这是我不太担心的事情,所以它没有那么重要


Tags: 产品类别pricemaxroomgroupbyschoolliving
2条回答

如果你按价格分组,那么max没有多大意义,因为每个组只有一个价格。所以我猜你想得到每个产品类别中最昂贵的商品。如果是这样,那么您可以使用groupbyrank来实现此目的

ranks = df.groupby('product_category_tree')['retail_price'].rank(method='dense', axis=1, ascending=False)

df = df.assign(grp_rank=ranks)

df.loc[df.grp_rank == 1, :]

我相信我一直在寻找一个简单的sort_values()函数。 我按感兴趣的列对数据集进行了排序:

df = df.sort_values(by=['retail_price'], ascending=False)

这给了我下表:

       retail_price     product_category_tree
116     571230.0        ["Watches >> Wrist Watches >> Breitling Wrist ...
11631   250500.0        ["Furniture >> Living Room >> Sofas & Sectiona...
11507   217500.0        ["Furniture >> Living Room >> Sofas & Sectiona...
11464   204600.0        ["Furniture >> Living Room >> Sofas & Sectiona...
134     201000.0        ["Watches >> Wrist Watches >> Cartier Wrist Wa...

相关问题 更多 >