【问题标题】: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']})

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

【问题讨论】:

    标签: python pandas data-visualization data-science


    【解决方案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 个不同的列。
    猜你喜欢
    • 2021-10-24
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2022-01-10
    • 2019-07-29
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多