我有两个数据帧,如下所示。每个数据帧的第二列是对象类型。它们包含一个列表。
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)
但是,有没有更好,更清洁的解决方案呢?我们可以避免对另一个数据帧的所有行重复一个数据帧吗?