Сначала создайте индекс по всем столбцам без _
на DataFrame.set_index
, если необходимо.
Затем создайте MultiIndex
на str.split
и измените форму наDataFrame.unstack
.
Последняя очистка данных - удалить первый уровень первым DataFrame.reset_index
, второй - для столбцов с MultiIndex
.Последний набор новых имен столбцов.
df = df.set_index('Month')
df.columns = df.columns.str.split('_', expand=True)
df = df.unstack().reset_index(level=0, drop=True).reset_index()
df.columns= ['Count','Color','Id','Month','Amount']
print (df)
Count Color Id Month Amount
0 8 red 17 01-01-2018 0
1 8 red 17 01-02-2018 100
2 8 black 29 01-01-2018 12
3 8 black 29 01-02-2018 12
4 10 black 29 01-01-2018 18
5 10 black 29 01-02-2018 12
Последний при необходимости изменить порядок столбцов:
df = df[['Month','Amount','Count','Color','Id']]
print (df)
Month Amount Count Color Id
0 01-01-2018 0 8 red 17
1 01-02-2018 100 8 red 17
2 01-01-2018 12 8 black 29
3 01-02-2018 12 8 black 29
4 01-01-2018 18 10 black 29
5 01-02-2018 12 10 black 29