簡體   English   中英

Pandas groupby 到新欄目

[英]Pandas groupby to new column

我有一個 dataframe 列codeimages

images是由逗號連接的urls字符串: <URL>,<URL2>,...

code不是唯一的,我需要使其唯一,但將所有圖像(來自所有變體)存儲在新列images_all中。

例如:

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

結果是:編碼一些 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"]

你知道如何解決嗎?

編輯

我還想保留其他列(對於具有相同代碼的所有行,它們都是相同的,這就是為什么我然后只是 drop_duplicates 並保留最后一行)

GroupBy.transform與自定義 function 一起使用以展平拆分值,然后轉換為集合並最后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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM