在我的数据框中,我有ClientID CartID FoodID Quantity,我想找出客户购买最多的食物是什么
我试过这个:
df.groupby(["ClientID", "FoodID"])['Quantity'].sum().max(level=['ClientID', 'FoodID']).reset_index()
但是得到了一个完全错误的输出:
Client FoodID Quantity
1 10 16008 24
2 10 17021 36
3 10 20665 6
4 10 20719 40
... ... ... ...
267610 200 84920 4
267611 200 85039 96
267612 200 85039 120
267613 200 85040 48
267614 200 85173 48
编辑:我也试过了
mbi.groupby("ClientID")["Quantity"].max()
但这就产生了一对(ClientID,最常购买的食物的数量),我需要(Client,FoodID)
以下内容将提供您想要的:
首先获取一个df,其中包含每个
ClientID
、FoodID
组合的总Quantity
。然后对ClientID
,Quantity
上的df进行排序,以便每个客户机的最高Quantity
出现在顶部,最后删除每个客户机的重复项,这将删除所有客户机记录,但顶部恰好是最大数量测试用例:
输出:
编辑:
正如在处理每个
ClientID
的FoodID
之和的注释中一样,您只需要在idxmax
的groupby之前为sum
创建另一个groupby。这将返回元组。传递maxClientID
、FoodID
的这些元组以构造数据帧原件:
使用
idxmax
获取ClientID
每组在Quantity
最大值上的索引。在拥有每个组的maxQuantity
索引后,将其传递给loc
以获得相应的行和列文件idxmax
相关问题 更多 >
编程相关推荐