Комбинации в Pandas Python (более 2 уникальных)

#pandas

#pandas

Вопрос:

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

  UserID     Purchased
  A          Laptop
  A          Food
  A          Car
  B          Laptop
  B          Food
  C          Food
  D          Car
  

Теперь я хочу найти все уникальные комбинации приобретенных продуктов и количество уникальных пользователей для каждой комбинации. Мой набор данных содержит около 8 различных продуктов, поэтому выполнение этого вручную занимает очень много времени. Я хочу, чтобы конечный результат был чем-то вроде:

 Number of products   Products    Unique count of Users
       1              Food                1
       2              Car                 1
       2            Laptop,Food           1
       3            Car,Laptop,Food       1
  

Ответ №1:

 # updated sample data
d = {'UserID': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'C', 6: 'D', 7: 'C'},
 'Purchased': {0: 'Laptop',
  1: 'Food',
  2: 'Car',
  3: 'Laptop',
  4: 'Food',
  5: 'Food',
  6: 'Car',
  7: 'Laptop'}}

df = pd.DataFrame(d)


# groupby user id and combine the purchases to a tuple
new_df = df.groupby('UserID').agg(tuple)
# list comprehension to sort your grouped purchases
new_df['Purchased'] = [tuple(sorted(x)) for x in new_df['Purchased']]
# groupby purchases and get then count, which is the number of users for each purchases
final_df = new_df.reset_index().groupby('Purchased').agg('count').reset_index()
# get the len of purchased, which is the number of products in the tuple
final_df['num_of_prod'] = final_df['Purchased'].agg(len)
# rename the columns
final_df = final_df.rename(columns={'UserID': 'user_count'})

             Purchased  user_count  num_of_prod
0               (Car,)           1            1
1  (Car, Food, Laptop)           1            3
2       (Food, Laptop)           2            2
  

Комментарии:

1. Привет, спасибо за это. Это все еще не соответствует моему требованию, потому что, если человек купил ноутбук и автомобиль, этот человек не должен попадать в категорию «только для ноутбука». Согласно вашему решению, это так. был бы очень признателен, если бы вы могли помочь мне с этим, братан. Спасибо.

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

3. @Chris, я обновил образец данных и ожидал выхода. Мне нужны все возможные комбинации, но мне нужно количество пользователей только для этой конкретной комбинации. В ожидаемом выводе первая строка показывает 1 как уникальное количество, потому что только у 1 пользователя был только 1 продукт, и это «Еда». В вашем решении выше это показало бы 3 как уникальное количество после «Еды»