Преобразование столбца в строки в кадре данных Pandas - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть датафрейм Pandas с двумя столбцами. Один - уникальный идентификатор, а второй - название продукта, прикрепленного к этому уникальному идентификатору. У меня есть повторяющиеся значения для идентификатора и названия продукта. Я хочу преобразовать один столбец названий продуктов в несколько столбцов без дублирования идентификатора. Возможно, мне нужно объединить названия продуктов по идентификатору.

Мой фрейм данных выглядит так:

ID  Product_Name
100  Apple
100  Banana
200  Cherries
200  Apricots
200  Apple
300  Avocados

Я хочу иметь кадр данных, подобный этому:

ID 
100  Apple Banana
200  Cherries Apricots Apple
300  Avocados

Каждый товар по каждому идентификатору должен быть в отдельном столбце

Я пытался pd.melt, pd.pivot, pd.pivot_table, но только ошибки, и эта ошибка говорит No numeric types to aggregate

Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

использовать функцию поворота поворот это может сделать требуемую вещь!

0 голосов
/ 05 ноября 2018

Используйте cumcount для новых имен столбцов до MultiIndex на set_index и изменения формы на unstack:

df = df.set_index(['ID',df.groupby('ID').cumcount()])['Product_Name'].unstack()

Или создайте Series из list s и новые DataFrame с помощью конструктора:

s = df.groupby('ID')['Product_Name'].apply(list)
df = pd.DataFrame(s.values.tolist(), index=s.index)

print (df)
            0         1      2
ID                            
100     Apple    Banana    NaN
200  Cherries  Apricots  Apple
300  Avocados       NaN    NaN

Но если хотите, 2 столбца DataFrame:

df1 = df.groupby('ID')['Product_Name'].apply(' '.join).reset_index(name='new')
print (df1)
    ID                      new
0  100             Apple Banana
1  200  Cherries Apricots Apple
2  300                 Avocados
...