#python-3.x #dataframe #stack #pivot #multi-index
#python-3.x #фрейм данных #стек #сводный #многоиндексный
Вопрос:
Я хочу развернуть pandas DataFrame
без агрегации. Я пытался с pivot
/ stack
но я не получаю именно то, что хотел.
data = {'comp_id': ['0001', '0001', '0002', '0003', '0003', '0003'],
'stk': ['0001', '0001B', '0002', '0003', '0003B', '62208'],
'list_date': ['20150101', '20150331', '20130425', '20170401', '20170501', '20170601'],
'ABH': ['A', 'B', 'B', 'A', 'B', 'H']}
df = pd.DataFrame(data)
df.set_index(['comp_id', 'ABH'])
print(df)
comp_id stk list_date ABH
0 0001 0001 20150101 A
1 0001 0001B 20150331 B
2 0002 0002 20130425 B
3 0003 0003 20170401 A
4 0003 0003B 20170501 B
5 0003 62208 20170601 H
Я хотел бы преобразовать эти данные, используя comp_id
их в качестве индекса.
Мой желаемый результат DataFrame
:
stk | list_date
ABH A B H | A B H
comp_id |
---------------------------------------------------------------------
'0001' '0001' '0001B' | '20150101' '20150331'
'0002' '0002' | '20130425'
'0003' '0003' '0003B' '62208'| '20170401' '20170501' '20170601'
Ответ №1:
df = df.stack(level=[0], dropna=False)
df = df.unstack(level=[2, 1], fill_value='').sort_index(axis=1)
df = df[['stk', 'list_date']]
print(df)
stk list_date
ABH A B H A B H
comp_id
0001 0001 0001B 20150101 20150331
0002 0002 20130425
0003 0003 0003B 62208 20170401 20170501 20170601