python - 关键词匹配数据分析(列表-列)

标签 python pandas dataframe match

在我之前的任务中,

python Keyword matching(keyword list - column)

所以它有效。此外,我想看到更多。

问题

Q1。我想检查匹配列表中单词的频率。

输出我想要的Q1*

DF

0   K   Ieatapple
1   Y   bananaisdelicious
2   B   orangelikesomething 
3   Q   bluegrape
4   C   appleislike

mylist = [apple, banana]

#keyword matching

df[df['Value'].str.contains("|".join(mylist))]

  Name                Value
0    K          I eat apple
1    Y  banana is delicious
4    C          appleislike

#output what I want
matching word frequency : apple : 2, banana : 1

第二季度。我想检查列表中的哪些单词与与列表匹配的行匹配?

输出我想要的Q2

假设数据框与上面的示例相同,

  Name                Value
0    K          I eat apple
1    Y  banana is delicious
4    C          appleislike

#Matching keyword&row
0 : apple
1 : banana
4 : apple

如果您有多个,我希望您将它们全部展示出来。

感谢您的阅读,如果您对我的问题有任何疑问,请询问我。

进一步

    Value                 New
0   I eat appleapple      apple,apple
1   banana is delicious   banana
2   appleislikeapple      apple,apple

我应用了下面的答案,效果非常好。 但我还需要一件事。

如上例所示,如果一行中存在重复的单词,则将其全部找到。如果单词重复,我只想显示其中一个。

通过寻找另一个 stackoverflow,我尝试了一些方法来删除连续的重复单词,例如 Ordereddict,但它似乎只适用于链接的句子。

苹果苹果苹果->苹果 不适用于我的情况,例如 apple, apple -> apple, apple

所以当我使用下面的代码时,

s = pd.DataFrame(extracted.tolist())。堆 ()。 value_counts()

计算所有重复的单词。

如何解决?

最佳答案

如果只想匹配一个,第一个匹配的值使用 Series.str.extract与列表中的连接值:

df['new'] = df['Value'].str.extract(f'({"|".join(mylist)})', expand=False)
print (df)
  Name                Value     new
0    K          I eat apple   apple
1    Y  banana is delicious  banana
4    C          appleislike   apple

对于计数,请使用 Series.value_counts :

s = df['new'].value_counts()
print (s)
apple     2
banana    1
Name: new, dtype: int64

print ('matching word frequency: ' + ', '.join(f'{k}:{v}' for k, v in s.items()))
matching word frequency: apple:2, banana:1

如果想要匹配所有值,请使用 Series.str.findallSeries.str.join :

extracted = df['Value'].str.findall(f'({"|".join(mylist)})')
df['new'] = extracted.str.join(',')
print (df)
  Name                   Value           new
0    K  I eat apple and banana  apple,banana
1    Y     banana is delicious        banana
4    C             appleislike         apple

对于计数,请使用 DataFrame 构造函数 DataFrame.stackvalue_counts:

s = pd.DataFrame(extracted.tolist()).stack().value_counts()
print (s)
apple     2
banana    2
dtype: int64

print ('matching word frequency: ' + ', '.join(f'{k}:{v}' for k, v in s.items()))
matching word frequency: apple:2, banana:2

关于python - 关键词匹配数据分析(列表-列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60109545/

相关文章:

python - Trustpilot 网络抓取,空输出

python - 将代码从当前文件复制到另一个Python文件

python - DataFrame 到 Json 使用第一列作为键,第二列作为值

python - 将行拆分为新行并从其他列添加相应的匹配值

python - 创建每列有多个标题的数据框并在循环中填充数据框

python - 我怎样才能向前看而忽略一个子集?

python - 将单个项目 append 到 pandas 系列中的列表

python - 如何将匹配索引与两个 Pandas 数据框合并

pandas - 需要一种方法将字符串 pandas 拆分为带有数字的列

python - 如何调整行或列中的具体数据?