我有一个数据框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。
答案 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]})