【问题标题】:Pandas: seaborn countplot from several columns熊猫:来自几列的seaborn countplot
【发布时间】:2018-12-15 03:07:32
【问题描述】:

我有一个包含多个分类列的数据框。我知道如何做 countplot 常规地绘制一列。 问:如何在一个图中绘制所有列的最大计数?

这是一个用于澄清问题的示例性数据框:

import pandas as pd
import numpy as np
import seaborn as sns

testdf=pd.DataFrame(({   'Ahome' :   pd.Categorical(["home"]*10),
                         'Bsearch' : pd.Categorical(["search"]*8 + ["NO"]*2),
                          'Cbuy' : pd.Categorical(["buy"]*5 + ["NO"]*5),
                          'Dcheck' : pd.Categorical(["check"]*3 + ["NO"]*7),


                     } ))
testdf.head(10)
sns.countplot(data=testdf,x='Bsearch');

最后一行只是对一列使用正常的计数图。我想在 x 轴上显示列类别(家庭、搜索、购买和检查),在 y 轴上显示它们的频率。

提前致谢!

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    您需要使用countplot,如下:

    df = pd.melt(testdf)
    sns.countplot(data=df.loc[df['value']!="NO"], x='variable', hue='value')
    

    输出:

    【讨论】:

    • 谢谢!知道如何从值中删除“否”吗?
    • 从值中删除“NO”是什么意思?
    • 我的意思是显示你的情节中的一切,除了每列没有值。
    • 太棒了!非常感谢
    • 很高兴我能帮上忙。 @physiker
    【解决方案2】:

    正如@HarvIpan 指出的那样,使用melt 您将创建一个以列名作为条目的长格式数据框。在此数据帧上调用 countplot 会产生正确的绘图。

    作为与现有解决方案的不同之处,我建议根本不要使用 hue 参数。

    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    df=pd.DataFrame(({   'Ahome' :   pd.Categorical(["home"]*10),
                             'Bsearch' : pd.Categorical(["search"]*8 + ["NO"]*2),
                              'Cbuy' : pd.Categorical(["buy"]*5 + ["NO"]*5),
                              'Dcheck' : pd.Categorical(["check"]*3 + ["NO"]*7),
    
    
                         } ))
    
    df2 = df.melt(value_vars=df.columns)
    df2 = df2[df2["value"] != "NO"]
    sns.countplot(data=df2, x="variable")
    plt.show()
    

    【讨论】:

    • 这个看起来也很不错!您能否编辑您的答案,因为现在我猜您的示例数据和您的情节之间存在一些不匹配(这是正确的)。谢谢。
    • 抱歉。这是一个愚蠢的错误(我从一个完全不同的编辑器选项卡复制了代码。)现在应该修复了。
    • 干得好,谢谢!这也是一个很好的解决方案,并且在我很大的真实数据帧上工作得更快。
    • 嗨,我在这个答案中发表评论,因为我的问题非常相关。我想知道您如何才能将每个类别的比例与“否”一起显示。例如,对于Dcheck,它会将底部 1/3 显示为 check,顶部 2/3 显示为 NO。这可能吗?就目前而言,不排除NOcountplot只计算原始df每列的行数
    猜你喜欢
    • 2021-05-06
    • 2014-08-05
    • 1970-01-01
    • 2017-07-22
    • 2023-01-23
    • 2015-11-14
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多