在我之前的任务中
所以它有效。此外,我想了解更多。
题
Q1。我想检查匹配列表中单词的出现频率。
输出我想要的Q1 *
东风
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。我想检查列表中的哪些单词与匹配列表的行匹配?
输出我想要的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
并不适用于我的情况一样apple, apple -> apple, apple
所以当我使用下面的代码时
s = pd.DataFrame (extracted.tolist ()). stack (). 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
cosntructor与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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句