#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