сравнение значений подгрупп группы в pandas фреймворке - PullRequest
3 голосов
/ 25 мая 2020

У меня есть сгруппированный фрейм данных, как показано ниже, в котором суммируется номер. продуктов, приобретенных покупателями-мужчинами и женщинами:

                          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

Я хочу сравнить значения мужских и женских подгрупп в группе категорий продуктов и получить строки или группу, в которых женское значение больше.

1 Ответ

1 голос
/ 25 мая 2020

Вы можете попробовать unstack, чтобы создать столбец для каждого пола, а затем использовать where, чтобы поймать, если Female больше, чем Male. Он не дает точного типа вывода, но вы получите информацию.

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

или, если вам нужен фрейм данных, вы можете заменить tolist() на to_frame() и получить

          prod_cat
prod_cat          
Bags          Bags
Footwear  Footwear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...