Pandas: преобразование столбцов временных рядов в многоиндексные с помощью DatetimeIndex - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть файл csv / фрейм данных временного ряда, который выглядит следующим образом:

IDX_A   IDX_B   1/1/20  1/2/20  1/3/20
A       1       A1_0    A1_1    A1_2
A       2       A2_0    A2_1    A2_2
B       3       B3_0    B3_1    B3_2
B       4       B4_0    B3_1    B3_2

Я хотел бы преобразовать в мультииндекс с первым уровнем как DatetimeIndex:

                        F1
Date    IDX_A   IDX_B
1/1/20  A       1       A1_0
                2       A2_0
        B       3       B3_0
                4       B4_0
1/2/20  A       1       A1_1
                2       A2_1
        B       3       B3_1
                4       B3_1
1/3/20  A       1       A1_2
                2       A2_2
        B       3       B3_2
                4       B3_2

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

1 Ответ

1 голос
/ 23 апреля 2020

Мой подход:

(df.set_index(['IDX_A','IDX_B'])
   .rename_axis(columns='Date')
   .stack()
   .reorder_levels((2,0,1))
   .sort_index()
   .to_frame(name='F1')
)

Или используя melt:

(df.melt(['IDX_A','IDX_B'], var_name='Date',value_name='F1')
   .set_index(['Date','IDX_A','IDX_B'])
)

Вывод:

                      F1
Date   IDX_A IDX_B      
1/1/20 A     1      A1_0
             2      A2_0
       B     3      B3_0
             4      B4_0
1/2/20 A     1      A1_1
             2      A2_1
       B     3      B3_1
             4      B3_1
1/3/20 A     1      A1_2
             2      A2_2
       B     3      B3_2
             4      B3_2
...