Skip to main content
 首页 » 编程设计

python之如何在 python 中转换分组数据框

2025年05月04日15lautakyan007

我有这样的数据框

bin=[0,5,10] 
 
code sex age 
a     1   1 
a     1   6 
b     1   8 
b     2   2 
c     2   3 
c     1   4  

我把这个df总结成这样

 df.groupby([df.code,df.sex,pd.cut(df.age,bin)]).size().unstack().stack().fillna(0) 

我得到如下结果

code sex    age 
a    1  (0,5] 1 
a    1 (5,10] 1 
a    2  (0,5] 0 
a    2 (5,10] 0 
b    1  (0,5] 0 
b    1 (5,10] 1 
b    2  (0,5] 1 
b    2 (5,10] 0 
c    1  (0,5] 1 
c    1 (5,10] 0 
c    2  (0,5] 1 
c    2 (5,10] 0 

我想把这个df改成like

        1     2 
        a b c  a b c 
 (0,5]  1 0 1  0 1 1 
(5,10]  1 0 0  0 0 0 

我试过 stack() 或 unstack() 但我完全不知道要转换到上面的数据帧。 我怎样才能改变他们? 有人告诉我如何像这个过程一样转换 df。

请您参考如下方法:

您可以使用单个 pivot_table 来完成此操作:

In [11]: df 
Out[11]: 
  code  sex  age 
0    a    1    1 
1    a    1    6 
2    b    1    8 
3    b    2    2 
4    c    2    3 
5    c    1    4 
 
In [12]: df.pivot_table(index=pd.cut(df.age, bins), 
                        columns=["sex", "code"], 
                        aggfunc="count", 
                        fill_value=0) 
Out[12]: 
        age 
sex       1        2 
code      a  b  c  a  b  c 
age 
(0, 5]    1  0  1  0  1  1 
(5, 10]   1  1  0  0  0  0