擅长:python、mysql、java
<p>对于<code>pandas >= 0.25.0</code>,可以使用<code>ast.literal_eval</code>+<code>explode</code>+<code>pivot</code></p>
<pre><code>ii = df.set_index('speaker')['ratings'].apply(ast.literal_eval).explode()
u = pd.DataFrame(ii.tolist(), index=ii.index).reset_index()
u.pivot('speaker', 'name', 'count')
</code></pre>
<p/>
<pre><code>name Funny Happy Sad
speaker
Einstein 100 120 110
Newton 210 200 220
</code></pre>
<hr/>
<p>对于旧版本的<code>pandas</code></p>
<pre><code>a = df['speaker']
b = df['ratings']
ii = [
{**{'speaker': name}, **row}
for name, element in zip(a, b) for row in ast.literal_eval(element)
]
pd.DataFrame(ii).pivot('speaker', 'name', 'count')
</code></pre>