簡體   English   中英

如何刪除具有相同列功能值的行,以保留保留已刪除行另一功能的所有值的一行?

[英]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.

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