首页 文章

创建按一列和新列分组的新数据框

提问于
浏览
1
import pandas as pd
import numpy as np

df = pd.DataFrame( {
   'A': ['d','d','d','f','f','f','g','g','g','h','h','h'],
   'B': [5,5,6,7,5,6,6,7,7,6,7,7],
   'C': [1,1,1,1,1,1,1,1,1,1,1,1],
   'S': [2012,2013,2014,2015,2016,2012,2013,2014,2015,2016,2012,2013]     
    } );

df

我想创建一个新的数据框,其中列A被分组,列B和C的总和显示在2012年,2013年,2014年,2015年和2016年的新列中 .

1 回答

  • 2

    您可以将groupbyunstack一起使用:

    df = (df.B + df.C).groupby([df.A, df.S]).sum().unstack(fill_value=0)
    print (df)
    S  2012  2013  2014  2015  2016
    A                              
    d     6     6     7     0     0
    f     7     0     0     8     6
    g     0     7     8     8     0
    h     8     8     0     0     7
    

    df['D'] = df.B + df.C
    
    df = df.groupby(['A','S'])['D'].sum().unstack(fill_value=0)
    print (df)
    S  2012  2013  2014  2015  2016
    A                              
    d     6     6     7     0     0
    f     7     0     0     8     6
    g     0     7     8     8     0
    h     8     8     0     0     7
    

    pivot_table的另一个解决方案:

    df['D'] = df.B + df.C
    df = df.pivot_table(index='A', columns='S', values = 'D', aggfunc='sum', fill_value=0)
    print (df)
    S  2012  2013  2014  2015  2016
    A                              
    d     6     6     7     0     0
    f     7     0     0     8     6
    g     0     7     8     8     0
    h     8     8     0     0     7
    

相关问题