Python 如何制作分类列计数子集的条形图?
我有一个Fifa 19数据集,其中有来自100多个国家的1000多名球员的数据。我想做一个条形图,显示球员人数超过3人的国家分布。以下是我尝试过的:Python 如何制作分类列计数子集的条形图?,python,pandas,data-visualization,data-science,Python,Pandas,Data Visualization,Data Science,我有一个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'].valu
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).
我正在制作一个示例数据帧并将其添加到这里
fifa_19 = pd.DataFrame({'Player':['A','B','C','D','E','F','E','G','H'],'Nationality':['USA','USA','USA','Canada','Pakistan','India', 'Brazil','Brazil','Brazil']})
如果有人能帮助我,那就太好了。问题是,在您的代码中,
.value\u counts()
系列不能作为fifa\u 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)
到
我尝试了你的建议,我得到了一个结果,但这是一个显示玩家数量分布的条形图。例如,如果两个国家有156名玩家。那么水平轴是“156”,垂直轴是2。我希望民族分布。将
sns.barplot…
替换为sns.countplot(nation[“Frequency]”)
。虽然你的x和y标签没有意义/需要更改。我仍然有问题,但我已经解决了。问题是sns.countplot(),我不需要像countplot本身那样在sns.countplot()中使用值。value_counts()将与sns.barplot()一起使用,但只有在重置索引后,我才有两个不同的列。
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)