Как я могу использовать pasty для создания матрицы данных без необходимости записывать каждое из имен переменных по отдельности? - PullRequest
2 голосов
/ 28 апреля 2019

Скажем, у меня есть большой фрейм данных и несколько списков столбцов, и я хочу иметь возможность помещать их в пустышки без необходимости записывать каждое имя по отдельности. То есть я хочу назвать имена из списка списком имен столбцов, чтобы сформировать термины. Вместо того, чтобы записывать каждый отдельный термин в столбце моего фрейма данных.

Например, возьмите следующее: 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)

Однако это было неудачно.

Я также попытался использовать словарь с двумя записями, скажем, regress и control, который заполнен списками имен столбцов, а затем ввести его в первую запись dmatricies, но он тоже не работал.

Есть ли у кого-нибудь предложения по более эффективному способу включения вещей в документы Патси, вместо того, чтобы записывать каждое имя столбца, которое мы хотели бы включить в матрицу?

Заранее спасибо и дайте мне знать, если я ничего не понял.

1 Ответ

2 голосов
/ 28 апреля 2019

Здесь выполняется цикл 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.]]
...