首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >patsy中未修改的列名索引

patsy中未修改的列名索引
EN

Stack Overflow用户
提问于 2017-10-20 08:47:35
回答 1查看 122关注 0票数 0

我使用patsy来准备用于回归的分类数据,并希望从列名映射到DesignMatrix中的索引。我尝试使用column_name_indexes对象的DesignInfo属性,但是列名已经被修改以反映编码。

使用来自文档的数据的示例

代码语言:javascript
复制
>>> from patsy import demo_data, dmatrix
>>> data = demo_data("a", nlevels=3)
>>> data
{'a': ['a1', 'a2', 'a3', 'a1', 'a2', 'a3']}

>>> x = dmatrix("a", data)
>>> x
DesignMatrix with shape (6, 3)
  Intercept  a[T.a2]  a[T.a3]
          1        0        0
          1        1        0
          1        0        1
          1        0        0
          1        1        0
          1        0        1
  Terms:
    'Intercept' (column 0)
    'a' (columns 1:3)

>>> x.design_info.column_name_indexes
OrderedDict([('Intercept', 0), ('a[T.a2]', 1), ('a[T.a3]', 2)])

我希望能够访问例如'a2'的列索引,方法是:

代码语言:javascript
复制
x.design_info.column_name_indexes['a2']

当然,这会返回KeyError: 'a2'。因此,我必须自己构造修改后的键,以获得所需的列索引1

代码语言:javascript
复制
x.design_info.column_name_indexes['a[T.a2]']

是否有一种方法可以通过引用未修改的特性/列名(即'a2' )来访问列索引,而不是必须构造已修改的键,即'a[T.a2]'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-22 03:28:49

一般来说,在a2和设计矩阵列之间没有一对一的映射.您正在讨论的专栏已经比这更复杂了--这是a2a1值之间的处理对比--而且事情可能比这更复杂(例如,考虑Helmert或多项式编码)。

如果您知道要查找与变量a2a关联的治疗对比,则可以使用

代码语言:javascript
复制
def column_for_treatment(design_info, factor, value):
    column_name = "{}[T.{}]".format(factor, value)
    return design_info.column_name_indexes[colum_name]

column_for_treatment(x.design_info, "a", "a2")

这看起来有点傻,但它应该有效,我不知道有什么更好的考虑上面提到的一般问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46845480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档