Вы можете использовать cumcount
для подсчета дублированных имен столбцов и создать MultiIndex
, назначив вложенные списки:
df = df.set_index('id')
s = df.columns.to_series()
df.columns = [s.groupby(s).cumcount(), s]
print (df)
0 1
country cat brand month country cat brand month
id
1 GB x1 xx 12 GB x2 x1 8
2 GB x2 xx1 12 GB x2 x1 9
print (df.columns)
MultiIndex(levels=[[0, 1], ['brand', 'cat', 'country', 'month']],
labels=[[0, 0, 0, 0, 1, 1, 1, 1], [2, 1, 0, 3, 2, 1, 0, 3]])
И затем вызвать stack
:
df1 = df.stack(0)
print (df1)
brand cat country month
id
1 0 xx x1 GB 12
1 x1 x2 GB 8
2 0 xx1 x2 GB 12
1 x1 x2 GB 9
А затем выберите loc
:
print (df1.loc[1])
brand cat country month
0 xx x1 GB 12
1 x1 x2 GB 8
print (df1.loc[2])
brand cat country month
0 xx1 x2 GB 12
1 x1 x2 GB 9