2017-01-30 14 views
0

У меня есть dataframe в формате, который показан ниже:Добавление имени заголовка в группу столбцов в фрейме данных в пандах?

Product  R_1  R_2  R_3  S_1  S_2  S_3 
x   2  4  21  12  43  54 
y   5  2  12  42  31  12 

Теперь я хочу, чтобы клуб колонн R_1, r_2 и R_3 и назначить их под заголовком Store_R, а так же объединить столбцы S_1, s_2 и S_3 под Store_S заголовка , таким образом, что выход теперь в формате показано ниже:

   Store_R    Store_S 
Product R_1  R_2  R_3  S_1  S_2  S_3 
x   2  4  21  12  43   54 
y   5  2  12  42  31   12 

ответ

1

Вы можете concat фильтруется с помощью Dataframesfilter:

#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 
+0

Большое спасибо за помощь. Но что, если значение для количества магазинов является динамическим. В настоящее время я упомянул только два магазина R и S, допустим, теперь у меня есть 15 таких магазинов со мной, и я хочу поставить тот же тип заголовка для него. –