Создайте 3D-кадр данных панд - PullRequest
0 голосов
/ 29 октября 2018

У меня есть result, который является списком ndarrays. Я пытаюсь создать 3D-кадр данных панд в цикле следующим образом:

col_names = list()
col_names += [('var%d(t)' % (j + 1)) for j in range(138)]
for b in range(0, B):
    result = get_new_results()
    df1 = pd.DataFrame(data=result, columns=col_names)
    df = pd.concat([df, df1], axis=0)

Но это добавит каждый отдельный результат в виде новых строк в конце df. Поэтому, если каждый result имеет 112 ndarrays формы (138,), аналогично таблице размером 112x138, мой df будет иметь форму = (448, 138) после 4 итераций b (448 = 112 * 4). ). И индексы строк изменятся с 0 на 111 и снова будут сброшены с 0 до 112. Значение df.ndim равно 2. Но мне нужно создать трехмерный кадр данных следующим образом:

0  var1(t)     -0.863838, ... # 112 different values for var1(t)
   var2(t)      0.299368, ... # 112 different values for var2(t)
   ...           ...
   var137(t)    0.299368, ... # 112 different values for var137(t)

1  var1(t)      0.206053, ... # 112 different values for var1(t)
   var2(t)      1.063327, ... # 112 different values for var2(t)
   ...           ...
   var137(t)    0.299368, ... # 112 different values for var137(t)

2  var1(t)     -2.213588, ... # 112 different values for var1(t)
   var2(t)     -0.251905, ... # 112 different values for var2(t)
   ...           ...
   var137(t)    0.299368, ... # 112 different values for var137(t)
...

B  var1(t)    0.408204, ... # 112 different values for var1(t)
   var2(t)    1.266143, ... # 112 different values for var2(t)
   ...           ...
   var137(t)    0.299368, ... # 112 different values for var137(t)

Я считаю, что могу создать его, используя pd.MultiIndex, но я не смог придумать разумного решения. Может кто-нибудь, пожалуйста, помогите мне исправить это?

1 Ответ

0 голосов
/ 31 октября 2018

Вот как мне удалось создать фрейм данных:

frames = []
col_names = list()
col_names += [('var%d(t)' % (j+1)) for j in range(138)]
for i in range(0, B):
    result = get_new_results()
    df_tmp = pd.DataFrame(data=results, columns=col_names)
    frames.append(df_tmp)
df = pd.concat(frames, axis=0, keys=range(0, 112))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...