![](/img/trans.png)
[英]How to make same value of one column for those rows which have same values in another column pandas
[英]How to delete rows that share the same value of a column feature to make one row which keeps all the values of another feature of the deleted rows?
我有一組房地產廣告數據 。 其中有幾行是關於同一房地產的,所以到處都是不完全相同的重復項。 看起來像這樣:
ID URL CRAWL_SOURCE PROPERTY_TYPE NEW_BUILD DESCRIPTION IMAGES SURFACE LAND_SURFACE BALCONY_SURFACE ... DEALER_NAME DEALER_TYPE CITY_ID CITY ZIP_CODE DEPT_CODE PUBLICATION_START_DATE PUBLICATION_END_DATE LAST_CRAWL_DATE LAST_PRICE_DECREASE_DATE
0 22c05930-0eb5-11e7-b53d-bbead8ba43fe http://www.avendrealouer.fr/location/levallois... A_VENDRE_A_LOUER APARTMENT False Au rez de chaussée d'un bel immeuble récent,... ["https://cf-medias.avendrealouer.fr/image/_87... 72.0 NaN NaN ... Lamirand Et Associes AGENCY 54178039 Levallois-Perret 92300.0 92 2017-03-22T04:07:56.095 NaN 2017-04-21T18:52:35.733 NaN
1 8d092fa0-bb99-11e8-a7c9-852783b5a69d https://www.bienici.com/annonce/ag440414-16547... BIEN_ICI APARTMENT False Je vous propose un appartement dans la rue Col... ["http://photos.ubiflow.net/440414/165474561/p... 48.0 NaN NaN ... Proprietes Privees MANDATARY 54178039 Levallois-Perret 92300.0 92 2018-09-18T11:04:44.461 NaN 2019-06-06T10:08:10.89 2018-09-25
我想刪除太相似而不能重復的行,而只保留其中一個來保存和收集已刪除行的CRAWL_SOURCE
。 例如,假設我要在描述或大多數圖像相似的情況下在CRAWL_SOURCE
保留一行。 到目前為止,我只找到一種創建新列的方式來描述相同的內容:
df['is_duplicated'] = df.duplicated(['DESCRIPTION'])
或當圖像相同時:
def image_similarity(imageAurls,imageBurls):
imageAurls = ast.literal_eval(imageAurls)
imageBurls = ast.literal_eval(imageBurls)
for urlA in imageAurls:
responseA = requests.get(urlA)
imgA = Image.open(BytesIO(responseA.content))
print(imgA)
for urlB in imageBurls:
responseB = requests.get(urlB)
imgB = Image.open(BytesIO(responseB.content))
hash0 = imagehash.average_hash(imgA)
hash1 = imagehash.average_hash(imgB)
cutoff = 5
if hash0 - hash1 < cutoff:
print(urlA)
print(urlB)
return('similar')
return('not similar')
df['NextImage'] = df['IMAGES'][df['IMAGES'].index - 1]
df['IsSimilar'] = df.apply(lambda x: image_similarity(x['IMAGES'], x['NextImage']), axis=1)
因此,如何刪除具有相同描述或相同照片的行,並使其收集已刪除行的CRAWL_SOURCE
?
一般而言: 如何刪除具有相同列功能值的行,以使一行收集另一列功能的所有值?
注意:如果您還有其他發現可能相同的房屋的想法,我將很高興聽到他們的聲音。 我認為,如果以下功能相同,那么兩行可能正在談論同一個房地產:
SURFACE LAND_SURFACE BALCONY_SURFACE TERRACE_SURFACE ROOM_COUNT BEDROOM_COUNT BATHROOM_COUNT LUNCHROOM_COUNT TOILET_COUNT FURNISHED FIREPLACE AIR_CONDITIONING GARDEN SWIMMING_POOL BALCONY TERRACE CELLAR PARKING PARKING_COUNT HEATING_TYPES HEATING_MODE FLOOR FLOOR_COUNT CONSTRUCTION_YEAR ELEVATOR CARETAKER ENERGY_CONSUMPTION GREENHOUSE_GAS_CONSUMPTION MARKETING_TYPE PRICE PRICE_M2
您正在尋找一種Record Linkage方法,並且它已經完成了。 我建議您使用一個單詞距離計算和一個不錯的文檔來檢測相似性的庫:Python Record Linkage Toolkit。
導入庫后,必須為要比較的源建立索引,如下所示:
indexer = recordlinkage.Index()
#using url as intersection
indexer.block('url')
candidate_links = indexer.index(df_a, df_b)
c = recordlinkage.Compare()
假設您要根據字符串的相似性進行比較,但它們並不完全匹配:
c.string('descriptionA', 'descriptionB', method='jarowinkler', threshold=0.85)
如果您想要完全匹配,則應使用:
c.exact('imageUrl')
無論如何,有更多基於記錄鏈接的資源(庫)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.