Как я могу объединить несколько строк по определенному идентификатору, не потеряв другие столбцы?

#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. Спасибо! Это работает. Я обнаружил проблему, почему он умножил идентификаторы категорий… У меня есть некоторые неверные данные в моем наборе данных. Но спасибо за решение! 🙂