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

问题描述 投票:0回答:1

我有一个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']})

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

python pandas data-visualization data-science
1个回答
0
投票

问题是,在您的代码中.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)

to

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)
© www.soinside.com 2019 - 2024. All rights reserved.