Вы можете concat
фильтруется с помощью Dataframes
filter
:
#if Product is column set to index
df = df.set_index('Product')
print (pd.concat([df.filter(like='R'),
df.filter(like='S')],
axis=1,
keys=('Store_R','Store_S')))
Store_R Store_S
R_1 R_2 R_3 S_1 S_2 S_3
Product
x 2 4 21 12 43 54
y 5 2 12 42 31 12
Другое решение с созданием MultiIndex.from_tuples
, но необходимо, чтобы первые столбцы были R
, а затем S
. Поскольку значения назначаются и возможно, некоторые значения могут быть ошибочными.
colsR = [('Store_R', col) for col in df.columns if 'R' in col]
colsS = [('Store_S', col) for col in df.columns if 'S' in col]
df = df.set_index('Product')
df.columns = pd.MultiIndex.from_tuples(colsR + colsS)
print (df)
Store_R Store_S
R_1 R_2 R_3 S_1 S_2 S_3
Product
x 2 4 21 12 43 54
y 5 2 12 42 31 12
sort_index
может помочь сортировать имена столбцов:
print (df)
Product S_1 R_2 R_3 S_12 S_2 S_3
0 x 2 4 21 12 43 54
1 y 5 2 12 42 31 12
colsR = [('Store_R', col) for col in df.columns if 'R' in col]
colsS = [('Store_S', col) for col in df.columns if 'S' in col]
df = df.set_index('Product').sort_index(axis=1)
df.columns = pd.MultiIndex.from_tuples(colsR + colsS)
print (df)
Store_R Store_S
R_2 R_3 S_1 S_12 S_2 S_3
Product
x 4 21 2 12 43 54
y 2 12 5 42 31 12
Большое спасибо за помощь. Но что, если значение для количества магазинов является динамическим. В настоящее время я упомянул только два магазина R и S, допустим, теперь у меня есть 15 таких магазинов со мной, и я хочу поставить тот же тип заголовка для него. –