<p>使用<code>collections.Counter</code></p>
<p>设置:</p>
<pre><code>import pandas as pd
from collections import Counter # Load 'Counter'
df = pd.DataFrame({'feelings': [['happy', 'happy', 'sad'],
['neutral', 'sad', 'mad'],
['neutral', 'neutral', 'happy']]})
lst1 = ['happy', 'fantastic']
lst2 = ['mad', 'sad']
lst3 = ['neutral']
# Create an intermediate dict
occ = {'occlst1': lst1, 'occlst2': lst2, 'occlst3': lst3}
</code></pre>
<p><strong>更新</strong>:根据@mozway的建议</p>
<pre><code>def count_occ(sr):
return {col: sum([v for k, v in Counter(sr).items() if k in lst])
for col, lst in occ.items()}
df = pd.concat([df, df['feelings'].apply(count_occ).apply(pd.Series)], axis=1)
</code></pre>
<p><strong>注意</strong>:为了可读性,我没有使用除<code>feelings</code>之外的任何其他列。但是<code>concat</code>函数从<code>df</code>还原所有列</p>
<p>输出:</p>
<pre><code>>>> df
feelings occlst1 occlst2 occlst3
0 [happy, happy, sad] 2 1 0
1 [neutral, sad, mad] 0 2 1
2 [neutral, neutral, happy] 1 0 2
</code></pre>