Python 是否将列从原始数据框添加到groupby数据框?
我有一个数据帧df1,数据如下所示: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':
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
asB
,该怎么办。那么您希望输出是什么样子?@Nitred我的数据是这样的,即不会发生这种情况,项目与部门的关系是多对一的。什么失败了?我想这可能是因为没有任何东西可以保证所有项目1都将使用部门A
。您是否可以手动添加它,而不是连接现有数据帧?如果第二行即索引1具有Dept
asB
,该怎么办。那么,您希望输出是什么样子?@Nitred我的数据是这样的,即永远不会发生这种情况,项目与部门的关系是多对一的。什么失败了?