Трансформация Панд

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных панд, такой как —

 id  name1   name2    date     type  usage1   usage2

1    abc     def   12-09-21    a    100.01    109
2    xyz     wer   13-09-21    b     45        51
1    xyz     def   14-09-21    b     34       100
1    abc     def   13-09-21    a     50        60
1    abc     def   14-09-21    a     45        10

 

Я хочу, чтобы он был преобразован в такой формат, как-

                                12-09-21          13-09-21            14-09-21
id    name1   name2  type   usage1  usage2    usage1  usage2     usage1  usage2
1      abc     def    a      100.01  109        50      60         45      10
1      xyz     wer    b       NA      NA        NA      NA         34      100
2      xyz     wer    b       NA      NA        45      51         NA      NA    

 

Что было бы лучшим способом сделать это, учитывая столбец даты в порядке возрастания слева направо в выходных данных.

Ответ №1:

По сути , это a pivot , но затем вам нужно очистить ось столбца с swaplevel помощью and sort_index . Это оставит вас с мультииндексом в строках с ['id', 'name1', 'name2', 'type'] уровнями и мультииндексом в столбцах.

 import pandas as pd
#df['date'] = pd.to_datetime(df['date'])

(df.pivot(index=['id', 'name1', 'name2', 'type'], columns='date')
   .swaplevel(0,1, axis=1)
   .rename_axis(columns=[None, None])
   .sort_index(axis=1)
)


                      12-09-21        13-09-21        14-09-21       
                      usage1 usage2   usage1 usage2   usage1 usage2
id name1 name2 type                                                
1  abc   def   a      100.01  109.0     50.0   60.0     45.0   10.0
   xyz   def   b         NaN    NaN      NaN    NaN     34.0  100.0
2  xyz   wer   b         NaN    NaN     45.0   51.0      NaN    NaN