Преобразование кадра данных путем создания столбца с использованием уникальных значений строк Python PANDAS - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующий фрейм данных

Name      Activities
Eric      Soccer,Baseball,Swimming
Natasha   Soccer
Mike      Basketball,Baseball

Мне нужно преобразовать его в следующий фрейм данных

Activities     Name
Soccer          Eric,Natasha,Mike
Swimming        Eric
Baseball        Eric,Mike
Basketball      Mike

как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Используя pd.get_dummies

Сначала используйте get_dummies:

tmp = df.set_index('Name').Activities.str.get_dummies(sep=',')

Теперь используйте stack и agg:

tmp.mask(tmp.eq(0)).stack().reset_index('Name').groupby(level=0).agg(', '.join)

                     Name
Baseball       Eric, Mike
Basketball           Mike
Soccer      Eric, Natasha
Swimming             Eric

Использование str.split и melt

(df.set_index('Name').Activities.str.split(',', expand=True)
    .reset_index().melt(id_vars='Name').groupby('value').Name.agg(', '.join))
0 голосов
/ 10 октября 2018

Вы можете разделить Действия, выполнив split, а затем преобразовав полученный список в Series.
Затем melt из широкого в длинный формат и groupbyрезультирующий столбец value (который Activities).
В вашем сгруппированном фрейме данных join поля Имени, связанные с каждым действием.

Например:

(df.Activities.str.split(",")
   .apply(pd.Series)
   .merge(df, right_index=True, left_index=True)
   .melt(id_vars="Name", value_vars=[0,1,2])
   .groupby("value")
   .agg({'Name': lambda x: ','.join(x)})
   .reset_index()
   .rename(columns={"value":"Activities"})
)

Вывод:

   Activities          Name
0    Baseball     Eric,Mike
1  Basketball          Mike
2      Soccer  Eric,Natasha
3    Swimming          Eric

Примечание. Методы reset_index() и rename() в конце цепочки просто косметические;основные операции завершаются после агрегации groupby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...