<p>我在下面创建了一个带有ID和text列的虚拟数据集,其中包含一些公司名称的字符串列。你知道吗</p>
<pre><code> # create dummy data frame with text columns
x=[1,2,3,4,5]
y=['apple google microsoft spotify alibaba','google microsoft','spotify google microsoft amazon','amazon google apple','amazon google spotify amazon']
df=pd.DataFrame({'ID':x,'text':y})
df
</code></pre>
<p>我还有一份名单,上面还有公司的名字</p>
<pre><code># create list of companies
listtry=['apple','google','microsoft','spotify','alibaba','amazon','structo']
</code></pre>
<p>我要做的是计算每个公司在主dataframe文本列中出现的行数,而不是跨文本列字符串出现的实际计数</p>
<p>下面的代码给出了实际发生次数</p>
<pre><code> # search amd count
df2 = list()
for company in listtry :
df2.append(df.text.str.count(company).sum())
df3=pd.DataFrame({'company':listtry,'count':df2})
df4=df3.sort_values('count',ascending=False)
df4
# gives results
company count
1 google 5
5 amazon 4
2 microsoft 3
3 spotify 3
0 apple 2
4 alibaba 1
6 structo 0
</code></pre>
<p>预期的输出应该是Amazon的3倍,因为它只出现在3行中,但在最后一个字符串中出现了两次,因此is count total是4。你知道吗</p>
<p>再次尝试,将<code>count</code>更改为<code>contains</code>,并取df的长度:</p>
<pre><code>for company in listtry :
df2.append(len(df[df.text.str.contains(company)])) # only changes here
</code></pre>