2 回答

TA貢獻1785條經驗 獲得超4個贊
index_col=0讀入數據時可以設置。然后執行操作:.stack(0)和reset_index()。傳遞0in.stack(0)確保您將Vs 放在列上,將Qs 放在行上,反之亦然stack(1),因為您的列中有兩行的多重索引:
df = (pd.read_excel('Desktop\Book1.xlsx',header=[0,1], index_col=0).stack(0).reset_index()
.rename({'level_0' : '', 'level_1' : ''}, axis=1))
df
Out[1]:
V1 V2 V3
0 Ram Q1 11 19 10
1 Ram Q2 10 12 14
2 Syam Q1 11 19 10
3 Syam Q2 10 12 14

TA貢獻1860條經驗 獲得超8個贊
您好,歡迎來到 StackOverflow!
以下是我為此尋找解決方案所取得的進展。
首先,應讀取數據,例如將其Ram
作為Syam
索引列:
df?=?pd.read_excel(path,sheet_name='Sheet1',header=[0,1],index_col=0)
那么,你想要的方法是stack
(重塑指南)
In [52]: df
Out[52]:
? ? ? ?Q1? ? ? ? ? Q2
? ? ? ?V1? V2? V3? V1? V2? V3
?Ram? ?11? 19? 10? 10? 12? 14
?Syam? 11? 19? 10? 10? 12? 14
In [53]: df.stack()
Out[53]:
? ? ? ? ? ? ? Q1? ?Q2
?Ram? ?V1? ? ?11? ?10
? ? ? ?V2? ? ?19? ?12
? ? ? ?V3? ? ?10? ?14
?Syam? V1? ? ?11? ?10
? ? ? ?V2? ? ?19? ?12
? ? ? ?V3? ? ?10? ?14
然而,在沒有任何參數的情況下,它會堆疊列的最后一層,正如我們所看到的,這是V. 我們想要堆疊第一層,所以需要調用df.stack(0).
然而,這樣做時,會出現錯誤:ValueError: The name? ? ? ?occurs multiple times, use a level number。對我來說,這看起來像是一個pandas側面的錯誤。
編輯: 經過一番調查,我意識到我的級別df具有相同的名稱:
In [75]: df.columns
Out[75]:
MultiIndex([(' Q1', ' V1'),
? ? ? ? ? ? (' Q1', ' V2'),
? ? ? ? ? ? (' Q1', ' V3'),
? ? ? ? ? ? (' Q2', ' V1'),
? ? ? ? ? ? (' Q2', ' V2'),
? ? ? ? ? ? (' Q2', ' V3')],
? ? ? ? ? ?names=['? ? ?', '? ? ?'])
由(4 個空格)組成? ? 。
相反,如果我們確保級別具有不同的名稱:
In [89]: df.columns.names = ['H1', 'H2']
In [90]: df
Out[90]:
H1? ? Q1? ? ? ? ? Q2
H2? ? V1? V2? V3? V1? V2? V3
Ram? ?11? 19? 10? 10? 12? 14
Syam? 11? 19? 10? 10? 12? 14
那么我們就可以正確應用df.stack(0):
In [91]: df.stack(0)
Out[91]:
H2? ? ? ? ?V1? ?V2? ?V3
? ? ? H1
Ram? ?Q1? ?11? ?19? ?10
? ? ? Q2? ?10? ?12? ?14
Syam? Q1? ?11? ?19? ?10
? ? ? Q2? ?10? ?12? ?14
添加回答
舉報