【问题标题】:create histograms for all categorical variable values为所有分类变量值创建直方图
【发布时间】:2018-11-22 02:25:03
【问题描述】:

我的数据类似于下面的示例数据,其中的列包含分类数据,例如下面的“var1”和“var2”,然后是连续数据的列。我想做的是通过分类列中的每个值为每个连续变量创建直方图。我在下面的示例代码中仅针对 var1='Y' 完成了此操作,但我想针对 var1='N' 和每个 var2 值执行此操作。除了手工一遍又一遍地编码或将其转换为函数之外,是否有一些简单的方法可以做到这一点?

示例数据:

var1=['Y','N','Y','Y','N','Y']
var2=['S','V','H','S','V','H']
cont1=[1,3,4,5,2,7]
cont2=[4,3,4,5,5,7]
cont3=[3,7,4,5,2,1]

data={'var1':var1,'var2':var2,'cont1':cont1,'cont2':cont2,'cont3':cont3}

df=pd.DataFrame(data)

代码:

df[df['var1']=='Y'].hist()

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    pandas.DataFrame.hist() 中使用by 参数:

    如果您想为var1var2 的每个组合看到一个连续变量:

    df.hist(column='cont1', by=['var1','var2'])
    

    如果您想在同一图上查看var1var 的每个组合的所有不同颜色的连续变量:

    df.hist(by=['var1', 'var2'])
    

    如果您希望以这种方式查看数据,也可以单独对每个分类列执行 by 参数:

    df.hist(by='var1')
    

    df.hist(by='var2')
    

    显然,对于您的示例数据,它们看起来太简单了,但我认为如果您将这种语法应用于您的数据,您应该能够得到您想要的。

    编辑: 如果您想轻松浏览列列表,您可以在列表理解中使用它,并根据需要使用返回的轴数组,或者在 for 循环中使用它,将轴更复杂地操作成所需输出的图形.

    varsToLoop = ['var1','var2']
    [df.hist(by=x) for x in varsToLoop]
    

    【讨论】:

    • @jweeder 感谢您这么快回复我。这和我要找的很接近。我想我仍然需要编写一个函数来循环使用“by”来遍历 var1、var2,但这很有帮助
    • @user3476463 请记住,df.hist() 实际上会返回一个轴数组,其长度等于 var1 或 var2 中唯一响应的数量。因此,您可以在我最近的编辑中生成带有列表理解的轴,并根据需要使用。可能比仅针对这种情况编写循环/函数更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2021-10-06
    • 2018-11-26
    • 2013-11-19
    • 2021-07-20
    • 2019-05-05
    相关资源
    最近更新 更多