簡體   English   中英

如何在保留索引的同時將 Pandas 數據幀從寬轉換為長?

[英]how do i convert a pandas dataframe from wide to long while keeping the index?

我想將數據框從寬轉換為長,從多列轉換為兩列,同時保留索引。 我在下面嘗試過使用melt。 請讓我知道我錯過了什么。

nb 實際數據框將有數百列,所以我無法在代碼中列出它們。

創建數據框:

df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'),index = ['jan','feb','mar'])

輸出:

      A   B   C
jan  76   7  72
feb  29  15  69
mar   4  24   9

融化數據框:

df2 = pd.melt(df.reset_index())

輸出:

     variable value
0     index   jan
1     index   feb
2     index   mar
3         A    76
4         A    29
5         A     4
6         B     7
7         B    15
8         B    24
9         C    72
10        C    69
11        C     9

所需的輸出:

                variable  value
       jan         A     76
       feb         A     29
       mar         A      4
       jan         B      7
       feb         B     15
       mar         B     24
       jan         C     72
       feb         C     69
       mar         C      9

使用df.melt ,您可以使用 , 'index'作為'index'名稱,然后將 'index' 列設置回索引並重命名:

df.reset_index().melt('index').set_index('index').rename_axis(None)

使用df.stack也可以使用下面的:

(df.stack().rename_axis([None,'variable']).reset_index(-1,name='value')
                                              .sort_values('variable'))

    variable  value
jan        A     76
feb        A     29
mar        A      4
jan        B      7
feb        B     15
mar        B     24
jan        C     72
feb        C     69
mar        C      9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM