【发布时间】:2017-07-02 04:52:59
【问题描述】:
我有一个如下形式的 DataFrame:
>>> sales = pd.DataFrame({'seller_id':list('AAAABBBB'),'buyer_id':list('CCDECDEF'),\
'amount':np.random.randint(10,20,size=(8,))})
>>> sales = sales[['seller_id','buyer_id','amount']]
>>> sales
seller_id buyer_id amount
0 A C 18
1 A C 15
2 A D 11
3 A E 12
4 B C 16
5 B D 18
6 B E 16
7 B F 19
现在我想做的是为每个卖家计算其最大买家在总销售额中所占的份额。我有执行此操作的代码,但我必须不断重置索引并再次分组,这很浪费。一定有更好的方法。我想要一个解决方案,我可以一次聚合一列并将其他列分组。 这是我当前的代码:
>>> gr2 = sales.groupby(['buyer_id','seller_id'])
>>> seller_buyer_level = gr2['amount'].sum() # sum over different purchases
>>> seller_buyer_level_reset = seller_buyer_level.reset_index('buyer_id')
>>> gr3 = seller_buyer_level_reset.groupby(seller_buyer_level_reset.index)
>>> result = gr3['amount'].max() / gr3['amount'].sum()
>>> result
seller_id
A 0.589286
B 0.275362
我简化了一点。实际上,我也有一个时间段列,因此我想在卖方和时间段级别执行此操作,这就是为什么在 gr3 中我按多索引分组(在此示例中,它显示为单个索引) . 我认为会有一个解决方案,而不是减少和重新组合,我只能从组中聚合一个索引,而将其他索引分组,但在文档或在线中找不到它。有什么想法吗?
【问题讨论】: