目前,我有一个数据框,我想比较两种颜色。
col_1是单词,col_2是短语。我想知道,如果两个单词(在col_1中)出现在col_2中,那么将两个单词更改为短语。
这里是数据框架
list1 = [['good', 'hello', 'morning',],['sit', 'good', 'down'],['get', 'who', 'down']]
list2 = [['good morning', 'good afternoon'],['sit down', 'rise up', 'good work'], ['sit here', 'get job', 'get down']]
df_new = pd.DataFrame({'words': list1})
df_new['para'] = list2
我想得到的结果是:看起来像:
list3 = [['good morning', 'hello'],['sit down', 'good'],['get down', 'who']]
list4 = [['good afternoon'],['rise up', 'good work'], ['get job', 'get down']]
df_new['result1'] = list3
df_new['result2'] = list4
- result1:如果短语中出现单词,则将两个单词更改为一个短语
- result2:删除result1中的短语,保留result2中的剩余短语。
关于如何获得:result1,2的任何建议。如果你能帮助我,我将非常感谢你的逻辑!谢谢你。
尽量只使用list,否则daframe会使任务复杂化。至于逻辑,这是我将如何进行:使用itertools,你可以得到你的一组单词的每一对,你可以将它们与你的句子进行比较。如果匹配,则上传不同的列表
import itertools
list1 = [['good', 'hello', 'morning',],['sit', 'good', 'down'],['get', 'who', 'down']]
list2 = [['good morning', 'good afternoon'],['sit down', 'rise up', 'good work'], ['sit here', 'get job', 'get down']]
def possible_pair(list):
n = len(list)
possible_pairs = itertools.permutations(list, r=2)
return possible_pairs
for i,words in enumerate(list1):
for pair in possible_pair(words):
sentence = pair[0]+' '+pair[1]
print(sentence)
if sentence in list2[i]:
list2[i].remove(sentence)
list1[i].append(sentence)
list1[i].remove(pair[0])
list1[i].remove(pair[1])
print(list1, list2)
输出:
[['hello', 'good morning'], ['good', 'sit down'], ['who', 'get down']] [['good afternoon'], ['rise up', 'good work'], ['sit here', 'get job']]
一旦完成,最终可以重建df