如何制作分类列计数子集的条形图?

Posted

技术标签:

【中文标题】如何制作分类列计数子集的条形图?【英文标题】:How do i make Bar Chart of a subset of counts of categorical Column? 【发布时间】:2020-09-18 06:12:47 【问题描述】:

我有一个 FIFA 19 数据集,其中包含来自 100 多个国家/地区的 1000 多名球员的数据。我想制作一个条形图,显示玩家数量大于 3 的民族分布。这是我尝试过的:

nation = fifa_19[fifa_19['Nationality'].value_counts()>=3]
plt.figure(figsize=(30, 15))
sns.set(style="whitegrid")
sns.countplot(nation, order = fifa_19['Nationality'].value_counts().index)
plt.title('Distribution of Nationalities of players')
plt.xlabel('Nationality') 
plt.ylabel('Frequency')

我得到这个错误:

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).

我正在制作一个示例 DataFrame 并将其添加到此处。

fifa_19 = pd.DataFrame('Player':['A','B','C','D','E','F','E','G','H'],'Nationality':['USA','USA','USA','Canada','Pakistan','India', 'Brazil','Brazil','Brazil'])

如果有人可以帮助我,那就太好了。

【问题讨论】:

【参考方案1】:

问题在于,在您的代码中,.value_counts() 系列不能用作fifa_19 数据帧的索引。而是:

nation = fifa_19['Nationality'].value_counts()
nation = nation.loc[nation >= 3]

plt.figure(figsize=(30, 15))
sns.set(style="whitegrid")
sns.barplot(data=nation, x="Country", y="Frequency", order = fifa_19['Nationality'].value_counts().index)
plt.title('Distribution of Nationalities of players')
plt.xlabel('Nationality') 
plt.ylabel('Frequency')

注意:如果您不希望不满足 3 人阈值的国籍的空值,请更改此行:

sns.barplot(data=nation, x="Country", y="Frequency", order = fifa_19['Nationality'].value_counts().index)

order = pd.DataFrame(fifa_19['Nationality'].value_counts().index).join(nation["Country"], how="inner")["Country"]
sns.barplot(data=nation, x="Country", y="Frequency", order = order)

【讨论】:

我尝试了你的建议,我得到了结果,但它是一个显示玩家数量分布的条形图。例如,如果 2 个国家有 156 名玩家。那么横轴是“156”,纵轴是2。我希望是国籍的分布。 sns.barplot... 替换为sns.countplot(nation["Frequency"])。尽管那时您的 x 和 y 标签没有意​​义/需要更改。 我仍然有问题,但我想通了。问题是 sns.countplot(),我不需要在 sns.countplot() 中使用 value_counts(),因为 countplot 本身就是这样做的。 value_counts() 将与 sns.barplot() 一起使用,但仅在重置索引后才能使用,因此我有 2 个不同的列。

以上是关于如何制作分类列计数子集的条形图?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python制作具有正确值计数的绘图条形图?

如何绘制条形图,显示由数据框列组成的各种桶的频率计数?

如何使用电子表格中的两个不同列制作按图分组的条形图?

来自不同列的元素计数的条形图 - 指导

如何将熊猫数据框中每列中唯一值的数量绘制为条形图?

Plotly:如何从单条迹线制作堆积条形图?