在我之前的任务中,
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.findall
与 Series.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.stack
和value_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/