熊猫-比较大小不同的两个数据框中的列表

时间:2020-04-16 09:24:37

标签: python pandas dataframe

我有两个数据帧,如下所示。每个数据帧的第二列是对象类型。它们包含一个列表。

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>

编辑 我通过以下代码实现了这一点

    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)

但是,有没有更好,更清洁的解决方案呢?我们可以避免对另一个数据帧的所有行重复一个数据帧吗?

0 个答案:

没有答案