首页 > 解决方案 > 根据一列的计数对数据框进行排序并绘图

问题描述

我的数据框中有两列:

winner    opening_shortname
0      White         Slav Defense
1      Black  Nimzowitsch Defense
2      White     King's Pawn Game
3      White    Queen's Pawn Game
4      White     Philidor Defense
...      ...                  ...
20053  White        Dutch Defense
20054  Black         Queen's Pawn
20055  White    Queen's Pawn Game
20056  White         Pirc Defense
20057  Black    Queen's Pawn Game

我想创建下面的图,前 10 名开场及其获胜者颜色比例 (%)。

在此处输入图像描述

标签: pythonpandasdataframesortingmatplotlib

解决方案


topk = 10
z = df.groupby(['opening_shortname', 'winner']).size().unstack()
ax = z.loc[z.sum(1).sort_values().tail(topk).index].plot.barh(color=['black', 'white'], edgecolor='black')
ax.xaxis.set_visible(False)

这按开放的普遍性对顶部的限制k(例如 OP 问题中的 10 个)进行排序。问题中提到的“比例(%)”是模棱两可的:提供的图清楚地显示了从顶部开口到下一个开口的总数递减,并且水平轴被移除。

无论如何,在您提供的示例数据上:


推荐阅读