Python中的堆栈和透视数据帧

2024-09-26 18:03:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很宽的数据帧,我想堆叠和透视,但不太清楚如何去做。在

这是我要开始的

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中的匹配值,最后以Topic作为索引。这有可能吗?在

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

^{pr2}$

这很接近,但我想让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

Tags: 数据org名称dataframetopicnanoutd2
2条回答

对于我来说,您想要的输出是什么还不是百分之百清楚,但据我所知,.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

或许:

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

相关问题 更多 >

    热门问题