Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否将列从原始数据框添加到groupby数据框?_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 是否将列从原始数据框添加到groupby数据框?

Python 是否将列从原始数据框添加到groupby数据框?,python,pandas,pandas-groupby,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':

我有一个数据帧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

这是不寻常的,但是如果您可以在自己进行分组时添加
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]})

这是不寻常的,但如果您可以在自己进行分组时添加
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]})

我认为这可能是因为无法保证所有项目1都使用Dept
A
。您是否可以手动添加它,而不是连接现有数据帧?如果第二行即索引1具有
Dept
as
B
,该怎么办。那么您希望输出是什么样子?@Nitred我的数据是这样的,即不会发生这种情况,项目与部门的关系是多对一的。什么失败了?我想这可能是因为没有任何东西可以保证所有项目1都将使用部门
A
。您是否可以手动添加它,而不是连接现有数据帧?如果第二行即索引1具有
Dept
as
B
,该怎么办。那么,您希望输出是什么样子?@Nitred我的数据是这样的,即永远不会发生这种情况,项目与部门的关系是多对一的。什么失败了?