首页 > 解决方案 > 对枚举/分类类型列求和时,h2o 数据框 GroupBy 和函数在做什么?

问题描述

想知道当列类型是分类(特别是 h2oenum类型)时,对 h2o 数据帧 GroupBy 对象中的列求和时会发生什么。

将 pandas 数据帧转换为 H2o 数据帧。然后我按某一列对行进行分组并对其他列求和,例如。

location_id  price store
------------------
1            10    JCP
1            15    SBUX
3            20    HOL

then after grouping and summing; df.group_by('location_id').sum(['price', 'store'])

location_id  price store
------------------
1            25    <some number>
3            20    <some number>

想知道在将分类列值添加在一起时这里发生了什么,并且似乎无法在 h2o文档中找到 GroupBy 对象的 sum() 源代码。

标签: h2o

解决方案


查看分类编码的 h2o 文档(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/categorical_encoding.html),enum类型(我是用于我的 h2o 数据框中的分类类型)我们看到

枚举或枚举:保持数据集不变,在内部将字符串映射为整数,并使用这些整数进行拆分 - 当 nbins_cats 太小而无法解析所有级别时通过序数性质或通过执行完美组拆分的位集。每个类别都是一个单独的类别;它的名称(或编号)无关紧要。例如,将字符串映射为 Enum 的整数后,您可以将 {0, 1, 2, 3, 4, 5} 拆分为 {0, 4, 5} 和 {1, 2, 3}。

因此,如果我正确地解释了这一点(有人请告诉这是否不正确),正在发生的事情是,当将 pandas 框架转换为 h2o 时,它会通过分配为enum类型的列的不同值并分配一个该标签的内部唯一 ID 整数值(用于训练和预测等,但我们通常看不到)。因此,在df.group_by(.).sum(.)对这些enum列执行 a 时,我们只是将数据帧转换为 h2o 数据帧时 h2o 分配的那些列的所有内部映射整数值相加。

同样,如果这不是对这里发生的事情的最完整解释,请告诉我。


推荐阅读