gpt4 book ai didi

python - patsy 中未修改的列名索引

转载 作者:行者123 更新时间:2023-11-30 09:50:05 25 4
gpt4 key购买 nike

我正在使用 patsy 准备用于回归的分类数据,并希望将列名称映射到其在 DesignMatrix 中的索引。我尝试使用 DesignInfocolumn_name_indexes 属性对象,但列名已被修改以反射(reflect)编码。

使用 docs 中的数据的示例:

>>> 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' 通过调用:

x.design_info.column_name_indexes['a2']

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

x.design_info.column_name_indexes['a[T.a2]']

有没有办法通过引用未修改的功能/列名称(即 'a2')来访问列索引,而不必构造修改后的键,即 'a[T .a2]'

最佳答案

一般来说,a2 等分类值与设计矩阵列之间不存在一对一的映射。您正在讨论的列已经比这更复杂了 - 这是 a2a1 值之间的处理对比 - 并且事情可以比这更复杂(例如,考虑 Helmert 或多项式编码)。

如果您知道要查找与变量aa2相关的治疗对比,那么您可以使用

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")

这看起来有点傻,但它应该可以工作,并且考虑到上面提到的一般问题,我不确定什么会更好。

关于python - patsy 中未修改的列名索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46845480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com