Pandas добавляет уникальные значения из Groupby в столбец

У меня есть фрейм данных, в котором перечислены коды пользователей.

UserID     Code
   123        A
   123        B
   123        A
   456        C
   456        D

Как добавить столбец, в котором показаны уникальные коды всех пользователей?

UserID     Code     UniqueCodes
   123        A          [A, B]
   123        B          [A, B]
   123        A          [A, B]
   456        C          [C, D]
   456        D          [C, D]

Я попробовал сделать df.groupby(by='UserID')['Code'].agg(['unique']), но это не сработало.

Я тоже пытался сделать df.groupby(by='UserID')['Code'].transform('unique'), но получил ошибку:

«уникальный» не является допустимым именем функции для преобразования (имя)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы почти сделали это, последним шагом было объединение исходного фрейма данных с сгруппированным:

df.merge(df.groupby(by='UserID')['Code'].agg(['unique']).reset_index(), on = 'UserID')


UserID  Code    unique
0   123 A   [A, B]
1   123 B   [A, B]
2   123 A   [A, B]
3   456 C   [C, D]
4   456 D   [C, D]

Вы можете использовать df.groupby и groupby.unique и карту в столбце «UserID»:

df['UniqueCodes'] = df['UserID'].map(df.groupby('UserID')['Code'].unique())

Выход:

   UserID Code UniqueCodes
0     123    A      [A, B]
1     123    B      [A, B]
2     123    A      [A, B]
3     456    C      [C, D]
4     456    D      [C, D]

Другое возможное решение, использующее преобразование , создающее список с уникальными кодами. Этот список должен быть повторен столько раз, сколько длина группы.

df['UniqueCodes'] = df.groupby(
    'UserID')['Code'].transform(lambda x: [x.unique().tolist()] * len(x))

Выход:

   UserID Code UniqueCodes
0     123    A      [A, B]
1     123    B      [A, B]
2     123    A      [A, B]
3     456    C      [C, D]
4     456    D      [C, D]

Другие вопросы по теме