让我们说我有一个像这样的数据帧df
string
This is a cat
cat is crazy
it drinks milk
,让我们拥有另一个像这样的数据集,该数据集具有关键字和为其分配的标签
keyword tag
cat 43
dog 34
crazy 40
因此,我需要检查这些字符串中是否存在关键字,并且需要相应地对其进行标记。所以输出是这样的
string keywords_matched tag
This is a cat cat 43
cat is crazy cat 43
cat is crazy crazy 40
有人可以使用R或python解决此问题吗?
预先感谢
答案 0 :(得分:2)
在“ tidyverse”中,“ unnest”可以帮助您:
string<-c(
"This is a cat",
"cat is crazy",
"it drinks milk")
string <-as.data.frame(string)
df <- read.table(text=
"keyword tag
cat 43
dog 34
crazy 40",header=TRUE,stringsAsFactors=FALSE)
string %>% mutate(keyword_matched=str_split(string,' ')) %>%
unnest %>%
inner_join(df,by=c("keyword_matched"="keyword"))
# string keyword_matched tag
#1 This is a cat cat 43
#2 cat is crazy cat 43
#3 cat is crazy crazy 40
答案 1 :(得分:1)
这是您问题的答案的 Python版本。这不是不是最高效的方法,但是会按要求完成工作。
import pandas as pd
df1 = pd.DataFrame(["This is a cat", "cat is crazy", "it drinks milk"], columns=["string"])
df2 = pd.DataFrame(["cat", "dog", "crazy"], columns=["keyword"])
df2['tag'] = pd.DataFrame([43, 34, 40])
cols=["string", "keywords_matched", "tags"]
my_values = []
for the_string in df1["string"]:
for keyword, tag in df2.itertuples(index=False):
if keyword in the_string:
my_values.append([the_string, keyword, tag])
else:
pass
result = pd.DataFrame(my_values, columns=cols)
应用的逻辑非常简单。我们只需使用嵌套for循环检查字符串中是否存在关键字,然后将获取的结果附加到列表中并进行转换放入数据框。
结果:
string keywords_matched tags
0 This is a cat cat 43
1 cat is crazy cat 43
2 cat is crazy crazy 40