#python #pandas #dataframe
#python #панды #dataframe
Вопрос:
У меня есть один фрейм данных Pandas, который выглядит так:
articleID name categorieId
1 test 1
1 test 2
1 test 3
1 test 4
2 pencile 1
2 pencile 2
2 pencile 3
И мой вопрос в том, как я могу объединить по идентификатору категории и при этом сохранить другие столбцы «articleId» и «name»?
Я хочу получить такой результат:
articleID name categorieID
1 test [1, 2, 3, 4]
2 pencile [1, 2, 3]
Если я объединю это с помощью этой команды:
df = df2.groupby("articleID")["categorieID"].apply(list).rest_index(name="categorieID")
Я получаю такой результат:
articleID categorieID
1 [1, 2, 3, 4, 1, 2, 3, 4]
2 [1, 2, 3, 1, 2, 3]
Как вы можете видеть, имя отсутствует, и оно умножает идентификаторы категорий на коэффициент 2 (я не знаю, почему).
Ответ №1:
Этого будет достаточно?
Ваши данные df
:
articleID name categorieId
0 1 test 1
1 1 test 2
2 1 test 3
3 1 test 4
4 2 pencile 1
5 2 pencile 2
6 2 pencile 3
Используйте DataFrameGroupBy.agg
, с tolist()
в вашем столбце categorieId. Затем reset_index()
res = (df.groupby(['articleID']).agg({'categorieId': lambda x: x.tolist(),'name':'first'})).reset_index()
print(res)
articleID categorieId name
0 1 [1, 2, 3, 4] test
1 2 [1, 2, 3] pencil
Конечно, вы можете впоследствии изменить порядок столбцов.
Комментарии:
1. Спасибо! Это работает. Я обнаружил проблему, почему он умножил идентификаторы категорий… У меня есть некоторые неверные данные в моем наборе данных. Но спасибо за решение! 🙂