擅长:python、mysql、java
<p>您可以使用<code>sum</code>、<code>index.repeat</code>来构造一个新的数据帧,并将其加入<code>df[['speaker', 'views']]</code>并将其分配给<code>df1</code>。接下来是<code>set_index</code>、<code>unstack</code>和<code>reset_index</code></p>
<pre><code>df['ratings'] = df['ratings'].apply(ast.literal_eval)
df1 = (pd.DataFrame(df.ratings.sum(), index=df.index.repeat(df.ratings.str.len()))
.drop('id', 1).join(df[['speaker', 'views']]))
df1.set_index(['speaker', 'views', 'name'])['count'].unstack().reset_index()
Out[213]:
name speaker views Funny Happy Sad
0 Einstein 1000 100 120 110
1 Newton 2000 210 200 220
</code></pre>
<hr/>
<p><strong>注意</strong>:<code>name</code>在最终输出中是列轴的标签。如果您不想看到它,只需按如下方式链接附加的<code>rename_axis</code></p>
<pre><code>df1.set_index(['speaker', 'views', 'name'])['count'].unstack().reset_index() \
.rename_axis([None], axis=1)
Out[214]:
speaker views Funny Happy Sad
0 Einstein 1000 100 120 110
1 Newton 2000 210 200 220
</code></pre>