Pandas MultiIndex: как выровнять столбцы под столбцом MultiIndex - PullRequest
1 голос
/ 01 марта 2020

Мой начальный фрейм данных выглядит следующим образом:

import pandas as pd


df = pd.DataFrame(data=[['Core','PM2',1234,'Direct','2019-11-08 00:00:00','2019-11-08 00:59:59',3.300,'V'],['Long Term','Wind',1111,'Direct','2019-11-09 00:00:00','2019-11-09 00:59:59',0.00123,'V']], 
                  columns=['Program','Parameter','Station','Method','Start','End','Measurement','Flag'])
df
      Program   Parameter   Station Method                Start                 End Measurement Flag
0        Core         PM2      1234 Direct  2019-11-08 00:00:00 2019-11-08 00:59:59     3.30000    V
1   Long Term        Wind      1111 Direct  2019-11-09 00:00:00 2019-11-09 00:59:59     0.00123    V

Затем я индексирую фрейм данных:

df_index = df.set_index(['Start','End','Measurement','Flag'])
df_index

Что дает мне:

                                                              Program   Parameter   Station Method
              Start                 End Measurement Flag                
2019-11-08 00:00:00 2019-11-08 00:59:59     3.30000    V         Core         PM2      1234 Direct
2019-11-09 00:00:00 2019-11-09 00:59:59     0.00123    V    Long Term        Wind      1111 Direct

Затем я создаю MultiIndex для столбцов:

df_columns = pd.MultiIndex.from_frame(df_index[['Program','Parameter','Station','Method']])

Затем я создаю новый фрейм данных с MultiIndex:

data = pd.DataFrame(df_index, index=df_index.index, columns=df_columns)
data

Это дает мне:

                                                      Program     Core  Long Term
                                                    Parameter      PM2       Wind
                                                      Station     1234       1111
                                                       Method   Direct     Direct
              Start                 End Measurement      Flag       
2019-11-08 00:00:00 2019-11-08 00:59:59     3.30000         V      NaN        NaN
2019-11-09 00:00:00 2019-11-09 00:59:59     0.00123         V      NaN        NaN

Я хочу, чтобы столбцы «Программа», «Параметр», «Станция» и «Метод» в столбцах MultiIndex группировали каждое Измерение и Флаг под ним, оставляя в качестве индекса начало и конец:

                                         Program       Core        Long Term
                                       Parameter        PM2             Wind
                                         Station       1234             1111
                                          Method     Direct           Direct
              Start                 End         Measurement Flag Measurement Flag
2019-11-08 00:00:00 2019-11-08 00:59:59             3.30000    V     
2019-11-09 00:00:00 2019-11-09 00:59:59                              0.00123    V   

Любая помощь будет принята. 1023 *

1 Ответ

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

Вы можете попробовать серию стеков / стеков:

import pandas
df = pd.DataFrame(data=[['Core','PM2',1234,'Direct','2019-11-08 00:00:00','2019-11-08 00:59:59',3.300,'V'],['Long Term','Wind',1111,'Direct','2019-11-09 00:00:00','2019-11-09 00:59:59',0.00123,'V']], columns=['Program','Parameter','Station','Method','Start','End','Measurement','Flag'])
df_index = df.set_index(['Start','End', 'Program','Parameter','Station','Method'])
df_index.unstack([-4, -3, -2, -1]).stack(-5).unstack(-1)

Screenshot

...