#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.