首页 > 解决方案 > Python - 根据文本中出现的字符串将一个值从一个熊猫 df 分配给另一个

问题描述

这是我的数据示例:

import pandas as pd

data = {'Text':['This is an example,', 
                'Another sentence is here.', 
                'Lets have fun.', 
                'this happened weeks ago.',
                'I am not sure what to put here.',
                'Another fake sentence.'], 
        'Score':[20, 21, 19, 18, 16, 12]} 
  
# Create DataFrame 
df = pd.DataFrame(data) 


data_words = {'words':['is', 
                'fun', 
                'happened', 
                'example'], 
        'frequency':[127, 112, 1234, 32]} 
  
# Create DataFrame 
df2 = pd.DataFrame(data_words) 



#Final Result:

data_result = {'words':['is', 
                'fun', 
                'happened', 
                'example'], 
        'frequency':[127, 112, 1234, 32],
            'Text': ['This is an example,',
                    'Lets have fun.',
                    'this happened weeks ago.',
                    'This is an example,']} 

df_final = pd.DataFrame(data_result) 

我正在尝试根据单词是否出现在文本中来df['text']匹配df2['words']。我只需要每个单词一个文本,理想情况下它会基于"Score"但它不是完全必要的。

所以,决赛df将有列:"Text", "Score", "words", 和"frequency"

标签: pythonpandas

解决方案


两个数据框之间的简单列表理解并第一次出现[0]

df2['Text'] = df2['words'].apply(lambda x: [y for y in df['Text'] if x in y][0])

输出:

    words       frequency   Text
0   is          127         This is an example,
1   fun         112         Lets have fun.
2   happened    1234        this happened weeks ago.
3   example     32          This is an example,

在解释列表理解时,我在“y”中搜索“x”时返回值“y”,其中 x 是 的每一行words,y 是 的每一行text。这将返回每行所有匹配项的列表。有些行在列表中有多个值,因为有多个匹配项,所以根据您的预期输出,我[0]在末尾添加了一个,以便将每个列表中返回的第一个值用于逐行应用的列表理解λx。否则,如果没有[0],将返回所有匹配项的列表。


推荐阅读