2017-01-30 87 views
0

我在其中,如下所示的格式數據幀:將標題名稱添加到pandas數據框中的一組列中?

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通過filter過濾Dataframes

#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家這樣的商店和我在一起,並且我想把相同類型的標題放在一起。 –

相關問題