Pandas группировать в новый столбец - PullRequest
1 голос
/ 09 июля 2020

У меня есть фрейм данных со столбцами code и images.

Столбец images - это строка urls, соединенная запятой: <URL>,<URL2>,...

Столбец code НЕ уникален, и мне нужно сделать его уникальным, но сохранить все изображения (из всех вариантов) в новом столбце images_all.

Например:

code something images
1    x         url1,url2,url3
1    x         url1,url4

Результат: code something images_all 1 x url1, url2, url3, url4

Я сделал

grouped = csv.groupby('code')
csv = csv.drop_duplicates(subset=['code'], keep='last')
csv['images_all'] = csv.apply(lambda r:  list(set(
    [image for image in grouped.get_group(r['code'])['images']]
)))

, что вызывает:

KeyError: 'code'

Но даже если он не поднял это , проблема в том, что изображения не будут [url1,url2,url3,url4]. Вместо этого это будет ["url1,url2,url3","url1,url4"].

Вы знаете, как это исправить?

EDIT

Я также хочу сохранить другие столбцы (они одинаковы для всех строк с одинаковым кодом, поэтому я затем просто drop_duplicates и сохраняю последнюю строку)

1 Ответ

1 голос
/ 09 июля 2020

Используйте GroupBy.transform с пользовательской функцией для сглаживания разделенных значений, затем преобразуйте их в наборы и последние join уникальные значения:

f = lambda x: ','.join(set([z for y in x for z in y.split(',')]))
df['images_all'] = df.groupby('code')['images'].transform(f)
print (df)
   code something          images           images_all
0     1         x  url1,url2,url3  url1,url3,url2,url4
1     1         x       url1,url4  url1,url3,url2,url4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...