如何使用pasty创建一个dmatrix而不必单独写出每个变量名?

问题描述 投票:2回答:1

假设我有一个大型数据框和一些列列表,我希望能够将它们放在一个patsy dmatricies中,而不必单独写出每个名称。也就是说,我想从列表中调用名称列表来形成术语。而不是在我的数据框列中写出每个单独的术语。

例如,请使用以下df

    df=pd.DataFrame( {'a':[1,2,3,4], 'b':[5,6,7,8],
                      'c':[8,4,5,3],  'd':[1,3,55,3],
                      'e':[8,4,5,3]})
   df
   >>
        a   b   c   d   e
   0    1   5   8   1   8
   1    2   6   4   3   4
   2    3   7   5   55  5
   3    4   8   3   3   3

据我所知,将其称为d矩阵需要我执行以下操作:

y,x = dmatrices('a~b+c+d+e', data=df)但是我希望能够运行更多的东西:

   regress=['b', 'c']
   control=['e', 'd']
   y,x=dmatricies('a~{}+{}'.format(' '.join(e for e in regressors), 
   ' '.join(c for c in control)), data=df)

然而,这是不成功的。

我还尝试使用带有两个条目的字典,例如回归和控制,它们填充了列名列表,然后将其输入到dmatricies的第一个条目中,但它也没有用。

有没有人有任何建议可以更有效地将事情纳入patsy的dmatricies而不是写出我们想要包含在矩阵中的每一个列名?

在此先感谢,如果我对任何事情都不清楚,请告诉我。

python pandas statsmodels patsy
1个回答
2
投票

在这里做for循环

for z in regress:
    for t in control:
        y,x=dmatrices('a~{}+{}'.format(z,t), data=df)
        print('a~{}+{}'.format(z,t))
        print(y,x)

a~b+e
[[1.]
 [2.]
 [3.]
 [4.]] [[1. 5. 8.]
 [1. 6. 4.]
 [1. 7. 5.]
 [1. 8. 3.]]
a~c+e
[[1.]
 [2.]
 [3.]
 [4.]] [[1. 8. 8.]
 [1. 4. 4.]
 [1. 5. 5.]
 [1. 3. 3.]]
a~d+e
[[1.]
 [2.]
 [3.]
 [4.]] [[ 1.  1.  8.]
 [ 1.  3.  4.]
 [ 1. 55.  5.]
 [ 1.  3.  3.]]
© www.soinside.com 2019 - 2024. All rights reserved.