比较数据帧中组的子组的值

2024-04-29 11:27:26 发布

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

我有一个分组数据框,如下所示,它总结了男性和女性客户购买的产品数量:

                          Qty
prod_cat         Gender
Bags             F       2362
                 M       2346
Books            F       7070
                 M       7587
Clothing         F       3425
                 M       3748
Electronics      F       5832
                 M       6476
Footwear         F       3716
                 M       3555
Home and kitchen F       4895
                 M       5041

我想得到那些在女性顾客中比男性顾客更受欢迎的产品。因此,预期产量如下:

   prod_cat
0      Bags
4  Footwear

我已经尝试了下面的方法,但寻找更好更简单的解决方案

        temp =temp.reset_index()
   ...: prod_f = temp[temp["Gender"] =="F"].sort_index().drop(columns="Gender").reset_index(drop=True)
   ...: prod_m = temp[temp["Gender"] =="M"].sort_index().drop(columns="Gender").reset_index(drop =True)
   ...:
   ...: display(prod_f,prod_m)
   ...:
   ...: f_popular = prod_f[["prod_cat"]].where(prod_f["Qty"]>prod_m["Qty"])
   ...: f_popular = f_popular.loc[~f_popular.prod_cat.isnull(),]
   ...: f_popular

输出

           prod_cat   Qty
0              Bags  2362
1             Books  7070
2          Clothing  3425
3       Electronics  5832
4          Footwear  3716
5  Home and kitchen  4895

           prod_cat   Qty
0              Bags  2346
1             Books  7587
2          Clothing  3748
3       Electronics  6476
4          Footwear  3555
5  Home and kitchen  5041


   prod_cat
0      Bags
4  Footwear

我想比较产品类别组中男性和女性子组的值,得到女性值更大的行或组


Tags: indexprodgenderbooksbagstempdropcat
1条回答
网友
1楼 · 发布于 2024-04-29 11:27:26

您可以尝试unstack按性别创建一列,然后使用where捕捉女性多于男性的情况。它没有给出确切的输出类型,但是您可以得到信息

print (df['Qty'].unstack().where(lambda x: x.F>=x.M).dropna().index.tolist())
['Bags', 'Footwear']

或者,如果您想要数据帧,您可以用to_frame()替换tolist()并获得

          prod_cat
prod_cat          
Bags          Bags
Footwear  Footwear

相关问题 更多 >