Панды, как передать столбец типа списка в функцию groupby

#python #pandas

Вопрос:

У меня есть такие данные, как следующие:

Продукт URL-адрес профиля Категория 1 Категория 2
Кеды place.com [«баскетбол»,»мода»,»хиппи»] [«маркетинг влияния»,»PPC»]

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

 joined = (
    joined.groupby(["Product", "Profile URL"])
    .aggregate({"Categories_1": "count"})
    .reset_index()
    .groupby("Product")
    .aggregate({"Profile URL": "count"})
)

joined.loc[joined["Profile URL"] > 1]
 

Это возвращает все продукты с более чем 1 URL — адресом профиля. Тем не менее, я хочу передать категорию 1 и категорию 2 через функцию groupby, чтобы создать фрейм данных со всеми продуктами, у которых более 1 URL-адреса профиля, и их сопутствующими категориями. Однако, поскольку категории относятся к типу списка, я получаю следующую ошибку, когда пытаюсь это сделать:

 joined = (
    joined.groupby(["Product", "Profile URL", "Categories_1"])
    .aggregate({"Categories_1": "count"})
    .reset_index()
    .groupby("Product")
    .aggregate({"Profile URL": "count"})
)
 

Это приводит к следующей ошибке:

Ошибка типа: не подлежащий хэшированию тип: «список».

Как мне передать столбцы категорий, чтобы сохранить их?

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

1. Вы можете трансформироваться Categories_1 , чтобы tuple затем выполнить групповую сборку: joined['Categories_1'] = joined['Categories_1'].transform(tuple)

2. Ага — панды. Объекты индекса (и, следовательно, любые сгруппированные столбцы) не могут иметь списков, так как они являются изменяемыми объектами и, следовательно, не могут формировать стабильный индекс. Элементы индекса должны быть хэшируемыми. Преобразуйте в кортеж, как упоминал @PanwenWang.