【问题标题】:Stack and Pivot Dataframe in PythonPython 中的 Stack 和 Pivot 数据框
【发布时间】:2016-01-15 07:56:11
【问题描述】:

我有一个很宽的数据框,我想堆叠和旋转,但不知道该怎么做。

这是我的开始

testdf = pd.DataFrame({"Topic":["A","B","B","C","A"],
                       "Org":[1,1,2,3,5,],
                       "DE1":["a","c","d","e","f"],
                       "DE2":["b","c","a","d","h"],
                       "DE3":["a","c","b","e","f"] })

testdf
Out[40]: 
  DE1 DE2 DE3  Org Topic
0   a   b   a    1     A
1   c   c   c    1     B
2   d   a   b    2     B
3   e   d   e    3     C
4   f   h   f    5     A

我想要做的是旋转表格,以便 Org 的列值是列名,每个名称的列值是 D1、D2 和 D3 的匹配值,最后将主题作为索引。这甚至可能吗?

编辑:正如 Randy C 所指出的,如果我使用 pivot 我可以得到以下结果;

testdf.pivot(index = "Topic",columns = "Org")
Out[44]: 
       DE1                 DE2                 DE3               
Org      1    2    3    5    1    2    3    5    1    2    3    5
Topic                                                            
A        a  NaN  NaN    f    b  NaN  NaN    h    a  NaN  NaN    f
B        c    d  NaN  NaN    c    a  NaN  NaN    c    b  NaN  NaN
C      NaN  NaN    e  NaN  NaN  NaN    d  NaN  NaN  NaN    e  NaN

这是接近的,但我想拥有它,以便 DE 值是“堆叠的”而不是宽的。结果看起来像;

    Org      1    2    3    5    
Topic                                                            
A           a  NaN  NaN    f    
A           b  NaN  NaN    h   
A           a  NaN  NaN    f
B           c    d  NaN  NaN    
B           c    a  NaN  NaN   
B           c    b  NaN  NaN
C           NaN  NaN    e  NaN 
C           NaN  NaN    d  NaN  
C           NaN  NaN    e  NaN

【问题讨论】:

    标签: python pandas stack pivot dataframe


    【解决方案1】:

    也许:

    In[249]: testdf.pivot("Org","Topic").T
    Out[249]: 
    Org          1    2    3    5
        Topic                    
    DE1 A        a  NaN  NaN    f
        B        c    d  NaN  NaN
        C      NaN  NaN    e  NaN
    DE2 A        b  NaN  NaN    h
        B        c    a  NaN  NaN
        C      NaN  NaN    d  NaN
    DE3 A        a  NaN  NaN    f
        B        c    b  NaN  NaN
        C      NaN  NaN    e  NaN
    

    【讨论】:

      【解决方案2】:

      我不是 100% 清楚您想要的输出是什么,但据我所知, .pivot() 似乎至少接近您正在寻找的:

      In [8]: testdf.pivot("Topic", "Org")
      Out[8]:
             DE1                 DE2                 DE3
      Org      1    2    3    5    1    2    3    5    1    2    3    5
      Topic
      A        a  NaN  NaN    f    b  NaN  NaN    h    a  NaN  NaN    f
      B        c    d  NaN  NaN    c    a  NaN  NaN    c    b  NaN  NaN
      C      NaN  NaN    e  NaN  NaN  NaN    d  NaN  NaN  NaN    e  NaN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-25
        • 2022-11-15
        • 2021-10-15
        • 1970-01-01
        • 2012-03-05
        • 2023-04-08
        • 2018-10-11
        • 1970-01-01
        相关资源
        最近更新 更多