Pandas - Сравнение списков в двух фреймах данных разного размера - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два кадра данных следующим образом. Второй столбец каждого фрейма данных имеет тип объекта. Они содержат список.

DF1
       ID, WORDLIST,          TAGS       
        1   air, water, fire  []
        2   bulb, light, ray  []
        3   chair table       []


DF2
    TAG  WORDLIST
     A   water, ice, liquid
     B   bulb, glass, ray
     C   water, fire
     D   lock, key

Теперь мне нужно сравнить эти фреймы данных. Для каждой строки в DF1 мне нужно проверить все строки в DF2. Если в списке слов из DF1 и DF2 есть общие слова, мне нужно назначить тег из DF2.

Мой результат должен выглядеть так:

Result : Updated DF1

        id1, WORDLIST,           TAGS
         1   air, water, fire    A, C
         2   bulb, light, ray    B
         3   chair, table         <Empty>

EDIT Я достиг этого с следующий код

    import pandas as pd
    data = [
        {'ID':1,'WORDLIST': ['air', 'water', 'fire'] , 'TAGS' : []},
        {'ID':2, 'WORDLIST': ['bulb', 'light', 'ray'] , 'TAGS' : [] },
        {'ID':3,'WORDLIST':['chair', 'table'], 'TAGS' : []}
    ]

    df1 = pd.DataFrame.from_records(data)

    data = [
        {'TAG':'A','WORDLIST': ['water', 'ice', 'liquid']},
        {'TAG':'B', 'WORDLIST': ['bulb', 'glass', 'ray'] },
        {'TAG':'C','WORDLIST':['water', 'fire']},
        {'TAG':'D','WORDLIST':['lock', 'key']}
    ]

    df2 = pd.DataFrame.from_records(data)


    print("DF1", df1)
    print("DF2", df2)


    def getTagForList(df1words):
        tags=[]
        for index, row in df2.iterrows():
            df2words = row['WORDLIST']
            if(bool(set(df1words).intersection(df2words) )):
                tags.append(row['TAG'])    
        return tags


    for index, row in df1.iterrows():
            tags = getTagForList(row['WORDLIST'])
            print(tags)
            df1.at[index,'TAGS']=tags

    print("Updated DF1", df1)

Но есть ли лучшее и более чистое решение для этого, которое является более эффективным? Можем ли мы избежать повторения одного фрейма данных для всех строк другого фрейма данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...