将原始数据帧中的列添加到groupby数据框?

时间:2018-01-09 01:11:30

标签: python pandas pandas-groupby

我有一个数据框df1,其数据如下所示:

      Item Store Sales Dept 
   0  1     1     5     A
   1  1     2     3     A
   2  1     3     4     A
   3  2     1     3     A
   4  2     2     3     A  

然后,我想使用group by按项目查看总销售额:

df2 = df1.groupby(['Item']).agg({'Item':'first','Sales':'sum'})

这给了我:

      Item Sales  
   0  1     12     
   1  2     6     

然后我根据销售数量添加一个列有项目等级的列:

 df2['Item Rank'] = df2['Sales'].rank(ascending=False,method='min').astype(int) 

所以我得到了:

      Item Sales Item Rank 
   0  1     12       1
   1  2     6        2 

我现在想要将dept列添加到df2,以便我有

      Item Sales Item Rank Dept 
   0  1     12       1      A
   1  2     6        2      A

但我尝试的一切都失败了。 当我尝试从头开始添加列时,或者如果我尝试将新df与原始df中的列连接起来时,我要么得到一个空列,要么是一个大小错误的df。

2 个答案:

答案 0 :(得分:2)

df.groupby(['Item']).agg({'Item':'first','Sales':'sum','Dept': 'first'}).\
   assign(Itemrank=df.Sales.rank(ascending=False,method='min').astype(int) )
Out[64]: 
      Item Dept  Sales  Itemrank
Item                            
1        1    A     12         3
2        2    A      6         2

答案 1 :(得分:1)

这是不寻常的,但如果您在进行群组编辑时可以添加Dept列:

如果你已经知道它需要的话,一个简单的选择就是对值进行硬编码:

df2 = df1.groupby(['Item']).agg({'Item':'first',
                                 'Sales':'sum',
                                 'Dept': lambda x: 'A'})

或者您可以从数据框本身中获取它:

df2 = df1.groupby(['Item']).agg({'Item':'first',
                                 'Sales':'sum',
                                 'Dept': lambda x: df1['Dept'].iloc[0]})