我有一个数据框,其中包含列code
和images
。
列images
是urls
的字符串,以逗号开头:<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并保留最后一行)
答案 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