簡體   English   中英

Python Pandas-如何解開具有兩個值的數據透視表,每個值變成一個新列?

[英]Python Pandas- how to unstack a pivot table with two values with each value becoming a new column?

在使用以下兩個值旋轉數據框后:

import pandas as pd

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                       'foo', 'bar', 'foo', 'bar'],
            'B' : ['one', 'one', 'two', 'two',
                      'two', 'two', 'one', 'two'],
            'C' : [56, 2, 3, 4, 5, 6, 0, 2],
            'D' : [51, 2, 3, 4, 5, 6, 0, 2]})

pd.pivot_table(df, values=['C','D'],rows='B',cols='A').unstack().reset_index()

當我拆開數據透視圖並重置索引時,將創建兩個新列“ level_0”和0。 Level_0包含列名C和D,0包含值。

    level_0     A   B   0
0   C   bar     one     2.0
1   C   bar     two     4.0
2   C   foo     one     28.0
3   C   foo     two     4.0
4   D   bar     one     2.0
5   D   bar     two     4.0
6   D   foo     one     25.5
7   D   foo     two     4.0

是否可以拆開框架,使每個值(C,D)出現在單獨的列中,或者我必須拆分並連接框架才能實現此目的? 謝謝。

編輯以顯示所需的輸出:

    A   B   C   D
0   bar one 2   2
1   bar two 4   4
2   foo one 28  25.5
3   foo two 4   4

您要stack (而不是堆疊):

In [70]: pd.pivot_table(df, values=['C','D'],rows='B',cols='A').stack()
Out[70]: 
          C     D
B   A            
one bar   2   2.0
    foo  28  25.5
two bar   4   4.0
    foo   4   4.0

雖然unstack你使用做了一個“堆”操作,因為你在指數線(僅在列軸)無多指標。

但是實際上,您還可以通過groupby-operation到達那里(並且我認為更合乎邏輯),因為這是您實際上所做的(將C和D列按A和B分組):

In [72]: df.groupby(['A', 'B']).mean()
Out[72]: 
          C     D
A   B            
bar one   2   2.0
    two   4   4.0
foo one  28  25.5
    two   4   4.0

暫無
暫無

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

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