Как объединить разные строки значений в одну строку для нового столбца? - PullRequest
2 голосов
/ 03 июня 2019

У меня есть таблица, как показано ниже:

Id    Family    Modal
a1     Jack      A381
a2     Jack      B674
a4    Sutyama    789b
a5    Sutyama    987y

Я хочу получить следующий вывод

Id    Family    Modal   Overall
a1     Jack      A381   A381,B674
a2     Jack      B674   A381,B674
a4    Sutyama    789b   789b,987y
a5    Sutyama    987y   789b,987y

Я пробую приведенный ниже код, но он возвращает пустую колонку для общего значения

df["Overall"]=df.groupby("Family")["Modal"].apply(' '.join)

У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 03 июня 2019

Вот мои эмпирические правила при применении функций с groupby:

  • Чтобы вычислить и вернуть агрегированный вывод, используйте GroupBy.agg или GroupBy.apply, или
  • Чтобы транслировать агрегированный результат обратно в исходные строки, используйте GroupBy.transform.

Это вариант использования для второго правила:

df['Overall'] = df.groupby("Family")["Modal"].transform(','.join)
df

   Id   Family Modal    Overall
0  a1  Jack     A381  A381,B674
1  a2  Jack     B674  A381,B674
2  a4  Sutyama  789b  789b,987y
3  a5  Sutyama  987y  789b,987y
2 голосов
/ 03 июня 2019

Вы также можете исправить свой код с помощью map

df["Overall"]=df.Family.map(df.drop_duplicates(['Family','Modal']).groupby("Family")["Modal"].apply(' '.join))
df
Out[45]: 
   Id   Family Modal    Overall
0  a1     Jack  A381  A381 B674
1  a2     Jack  B674  A381 B674
2  a4  Sutyama  789b  789b 987y
3  a5  Sutyama  987y  789b 987y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...