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

时间:2016-11-18 11:41:05

标签: python pandas dataframe

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 个答案:

答案 0 :(得分:2)

您可以groupby使用unstack

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