python - 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"
解决方案
两个数据框之间的简单列表理解并第一次出现[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]
,将返回所有匹配项的列表。
推荐阅读
- c# - 如何选择不在groupby中的属性
- python - 缺少usecols时如何迭代另一个xlsx
- string - ValueError:格式错误的节点或字符串:<_ast.Name object at 0x0000016835AEE3D0>
- linux - 导致 git 子模块失败的环境变量
- swift - 声明一个指向属性的指针并将其作为 inout 参数传递给 Swift 中的 func?
- c# - 稀疏矩阵(下一个元素)
- c++ - 使用位操作填充一个 int 集
- sql - 如何通过 SQL 查询从最早/最新行开始区分列?
- r - 如何将 corr.test 结果(仅相关或仅 P 值)合并到表中
- python - 用 Python 控制 ESP32 凸轮的问题