熊猫groupby到新专栏

时间:2020-07-09 12:59:56

标签: python pandas

我有一个数据框,其中包含列codeimages

imagesurls的字符串,以逗号开头:<URL>,<URL2>,...

code不是唯一的,我需要使其唯一,但是将所有图像(来自所有变体)存储在新列images_all中。

例如:

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

结果是: 编码一些images_all 1个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"]

您知道如何解决吗?

编辑

我还想保留其他列(具有相同代码的所有行都相同,这就是为什么我然后只需要drop_duplicates并保留最后一行)

1 个答案:

答案 0 :(得分:1)

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