Pivot - транспонировать столбцы по дубликатам pandas датафрейм - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть DataFrame со столбцом с именем 'ID', в котором есть повторяющиеся наблюдения. Каждая строка 'ID' имеет один или несколько столбцов значений 'Article'. Я хочу транспонировать всю группу данных с помощью идентификатора, добавляя новые столбцы в той же строке уникального идентификатора.

Что у меня есть:

ID  Article_1   Article_2
1   Banana      Coconut
2   Apple       Strawberry
1   Apple   
3   Tomatoe 
1   Pineapple   
2   Banana  
4   Apple   
5   Apple       Strawberry
3   Apple   

Что я хочу:

ID     Article_1    Article_2   Article_3   Article_4
0001    Banana      Coconut     Apple       Pineapple
0002    Apple       Strawberry  Banana      NaN
0003    Tomatoe     Apple       NaN         NaN
0004    Apple       NaN         NaN         NaN
0005    Apple       Strawberry  NaN         NaN

НОВОЕ РЕДАКТИРОВАНИЕ:

У меня были ситуации, когда порядок важен.

Мой DF:

ID  Article     Article_2
1   Banana      NaN
2   Apple       NaN
1   Apple       Coconut
3   Tomatoe     Coconut
1   Pineapple   Tropical
2   Banana      Coconut
4   Apple       Coconut
5   Apple       Coconut
3   Apple       Pineapple

Вывод с первым решением @Erfan:

        Article_1   Article_2   Article_3   Article_4   Article_5   Article_6
0001    Banana      Apple       Pineapple   NaN         Coconut     Tropical
0002    Apple       Banana      NaN         Coconut     NaN         NaN
0003    Tomatoe     Apple       Coconut     Pineapple   NaN         NaN
0004    Apple       Coconut     NaN         NaN         NaN         NaN
0005    Apple       Coconut     NaN         NaN         NaN         NaN

Что мне нужно:

        Article_1   Article_2   Article_3   Article_4   Article_5   Article_6
0001    Banana      Apple       Pineapple   Coconut     Tropical    NaN     
0002    Apple       Banana      Coconut     NaN         NaN         NaN
0003    Tomatoe     Apple       Coconut     Pineapple   NaN         NaN
0004    Apple       Coconut     NaN         NaN         NaN         NaN
0005    Apple       Coconut     NaN         NaN         NaN         NaN

Я могу ' Имеет Article_5 со значением NaN и Article_6 со значением в той же строке.

1 Ответ

1 голос
/ 27 февраля 2020

Если порядок статей не важен, мы можем использовать DataFrame.melt для разворачивания ваших статей в строки.

Затем мы используем DataFrame.pivot_table для агрегирования по каждому ID. В то время как мы используем GroupBy.cumcount, чтобы дать уникальный идентификатор каждому article в пределах ID:

dfn = df.melt(id_vars='ID', value_vars=['Article_1', 'Article_2'])
dfn = dfn.pivot_table(index='ID', 
                      columns=dfn.groupby('ID')['value'].cumcount().add(1),
                      values='value',
                      aggfunc='first').add_prefix('Article_').rename_axis(None, axis='index')

     Article_1   Article_2   Article_3 Article_4
0001    Banana       Apple   Pineapple   Coconut
0002     Apple      Banana  Strawberry       NaN
0003   Tomatoe       Apple         NaN       NaN
0004     Apple         NaN         NaN       NaN
0005     Apple  Strawberry         NaN       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...