Python根据文本中出现的字符串将值从一个指定给另一个

2024-04-25 12:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的数据示例:

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"


Tags: textandataframedfdataisexampleanother
1条回答
网友
1楼 · 发布于 2024-04-25 12:21:46

两个数据帧之间的简单列表理解,第一次出现时使用[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],以便获取每个列表中返回的第一个值,用于使用lambda x逐行应用的列表理解。否则,如果没有[0],将返回所有匹配项的列表

相关问题 更多 >