Инициализация DataFrame из массива с дополнительными столбцами - PullRequest
0 голосов
/ 18 мая 2018

Допустим, у меня есть следующий бит кода:

import pandas as pd
import numpy as np
A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))
import pandas as pd
df = pd.DataFrame({'Color':np.repeat(A,2),'Trial':np.tile(B,2),'V0':C[:,0,0],'V1':C[:,0,1],
                  'V2':C[:,1,0], 'V3':C[:,1,1]})
df

, который выводит следующий фрейм данных

>   Color Trial    V0          V1         V2          V3
> 0 red     0   0.726781    0.549726    0.053999    0.469885
> 1 red     1   0.609131    0.012120    0.587780    0.344290
> 2 blue    0   0.285235    0.491907    0.907871    0.549792
> 3 blue    1   0.646334    0.164288    0.029917    0.181290

Я бы хотел избежать необходимости вводить каждую запись numpyмассив, если размер массива увеличивается, поэтому я пришел к следующему решению для больших массивов

A = ['red', 'blue']
B = range(2)
C = np.random.random((4,2,2))
import pandas as pd
df = pd.DataFrame({'Color':np.repeat(A,2),'Trial':np.tile(B,2)})
_df = pd.DataFrame(C.reshape(4,4)).add_prefix('V')
df = pd.concat([df,_df],axis=1)
df

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

С MultiIndex

pd.DataFrame(data=C.reshape(4,4), index=pd.MultiIndex.from_product([A,B])).add_prefix('V')


              V0        V1        V2        V3
red  0  0.625676  0.201339  0.873423  0.227824
     1  0.202515  0.515637  0.344809  0.958107
blue 0  0.040853  0.682505  0.679995  0.104927
     1  0.548399  0.315772  0.081189  0.282158
0 голосов
/ 18 мая 2018

Нет, похоже, что ваши базы покрыты .... Вот немного очистки, используя DataFrame.assign -

pd.DataFrame(C.reshape(4,4)).add_prefix('V')).assign(
    Color=A * len(A), Trial=np.tile(B, len(A))
)

         V0        V1        V2        V3 Color  Trial
0  0.625676  0.201339  0.873423  0.227824   red      0
1  0.202515  0.515637  0.344809  0.958107  blue      1
2  0.040853  0.682505  0.679995  0.104927   red      0
3  0.548399  0.315772  0.081189  0.282158  blue      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...