亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數據堆疊到具有兩個標題的行中,并且第一個標題不合并

將數據堆疊到具有兩個標題的行中,并且第一個標題不合并

一只萌萌小番薯 2023-08-08 10:39:44
我有如下 xlsx 數據。      Q1 Q1 Q1 Q2 Q2 Q2      V1 V2 V3 V1 V2 V3  Ram  11 19 10 10 12 14  Syam 11 19 10 10 12 14我必須將其轉換為以下格式。        V1 V2 V3 Ram Q1 11 19 10Syam Q1 11 19 10 Ram Q2 10 12 14Syam Q2 10 12 14我無權更改源格式。我已經嘗試過如下。df=pd.read_excel(path,sheet_name='Sheet1',header=[0,1],index=[0,1])df.stack(level=0)但它不起作用,因為第一行單元格不是合并格式。尋找任何 pandas 函數來實現此目的
查看完整描述

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


查看完整回答
反對 回復 2023-08-08
?
桃花長相依

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


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號