Задать специфику c мультииндекс с нуля - PullRequest
0 голосов
/ 13 марта 2020

Моя задача заключается в следующем: мне нужно с нуля построить несколько таблиц в виде форм данных. В частности, каждая таблица всегда одинакова для каждого идентификатора (таблица сводной статистики). Например:

 result= {'Value':[mean_t,mean_t_1,mean_diff_lev, mean_diff_log],
             'T-stat':[np.NaN,np.NaN,t_diff_lev, t_diff_log],
             'Type':['XL','XL','XL', 'XL']}
 result=pd.DataFrame.from_dict(result,orient='index',
                                  columns=['Square_t','Square_t_1',
                                           'Mean diff','Mean diff log'])

дает мне это в результате:

        Square_t Square_t_1 Mean diff Mean diff log
Value   502.123    533.324  -31.2018    -0.0567523
T-stat      NaN        NaN  -3.33098      -5.38749
Type         XL         XL        XL            XL

У меня есть функция, которая вычисляет все используемые там значения, и в конце она создает указанный выше кадр данных из словарь значений. Мне нужно иметь возможность установить мультииндекс, который состоит из двух компонентов: первый (или внешний) является идентификатором (скажем, «Роджер»), а второй (или внутренний) задается тем, что у меня уже есть, то есть список ['Value','T-Stat'.'Type']. Результат должен выглядеть следующим образом:

             Square_t Square_t_1 Mean diff Mean diff log
Roger Value   502.123    533.324  -31.2018    -0.0567523
      T-stat      NaN        NaN  -3.33098      -5.38749
      Type         XL         XL        XL            XL

или вот так:

ID    Var      Square_t Square_t_1 Mean diff Mean diff log
Roger Value     502.123    533.324  -31.2018    -0.0567523
      T-stat        NaN        NaN  -3.33098      -5.38749
      Type           XL         XL        XL            XL

Цель состоит в том, чтобы получить возможность создать больший кадр данных, добавляя или объединяя различные кадры данных с разными идентификаторами.

1 Ответ

0 голосов
/ 14 марта 2020

Я нашел ответ сам. Самый простой способ - использовать метод pandas concat. Вместо того, чтобы создавать фрейм данных с мультииндексом для каждого идентификатора, лучше создать фрейм данных без идентификатора для каждого идентификатора, создав все кадры данных, и, после отслеживания различных идентификаторов в списке, мы можем просто объединить все идентификаторы кадры данных в целом. Допустим, у нас есть два кадра данных df1,df2 типа:

        Square_t Square_t_1 Mean diff Mean diff log
Value   502.123    533.324  -31.2018    -0.0567523
T-stat      NaN        NaN  -3.33098      -5.38749
Type         XL         XL        XL            XL

для идентификаторов ['Roger','Kyle']. Мы запускаем:

pd.concat([df1,df2],keys=['Roger','Kyle'])

, и результатом будет действительно мультииндексированный фрейм данных:

              Square_t Square_t_1 Mean diff Mean diff log
Roger  Value   430.855    454.733  -23.8778    -0.0492182
       T-stat      NaN        NaN  -3.48394      -5.37168
       Type         XL         XL        XL            XL
Kyle   Value   721.824     735.67   -13.846    -0.0192327
       T-stat      NaN        NaN  -1.93132      -2.74519
       Type         XL         XL        XL            XL

pd.concat([df1,df2],keys=['Roger','Kyle']),index

MultiIndex([('Roger',  'Value'),
            ('Roger', 'T-stat'),
            ('Roger',  'Type'),
            ( 'Kyle',  'Value'),
            ( 'Kyle', 'T-stat'),
            ( 'Kyle',  'Type')],
           )
...