如果匹配,则将数据框中的单词更改为来自不同数据帧的不同单词

Change word in dataframe to different word from different dataframe if they match

我在比较数据框时遇到了一些问题。我有两个数据框,第一个有标记词。

df_1:
id  sentence               some more info 
1   [I, am, happy]         bla 
2   [I, am, happier]       bla 
3   [I, am, the, saddest]  bla 

df_2:
id word   more     most 
1  happy  happier  happiest 
2  sad    sadder   saddest 

我想做的是比较两个数据帧,如果 df_1 中的一个词与 df_2 中任何地方的一个词匹配,它将被更改为 df_2['word'] 在相应单词的行中。所以我的输出看起来像这样:

df_1
id  sentence               some more info new_sentence
1   [I, am, happy]         bla       [I, am, happy]
2   [I, am, happier]       bla       [I, am, happy]
3   [I, am, the, saddest]  bla       [I, am, the, sad]

我尝试了一些使用 .compare() 和编写函数的方法,但到目前为止似乎没有任何效果。

提前感谢您的帮助!

通过删除 id 列从第二个 DataFrame 创建字典,通过 DataFrame.melt and DataFrame.set_index:

重塑
d = df.drop('id', axis=1).melt('word').set_index('value')['word'].to_dict()

如果不匹配,则将 dict.get 中的值映射为 return 相同的值:

df_1['new_sentence'] = df_1['sentence'].apply(lambda x: [d.get(y, y) for y in x])

或:

d = df.drop('id', axis=1).melt('word').set_index('value')['word'].to_dict()

df_1['new_sentence'] = [[d.get(y, y) for y in x] for x in df_1['sentence']]