【发布时间】:2019-05-31 21:34:27
【问题描述】:
我有一个 instacart 订单数据框
order_id product_id add_to_cart_order reordered product_name
32 49683 7 1 Cucumber Kirby
52 49683 4 1 Cucumber Kirby
88 49683 20 0 Cucumber Kirby
95 49683 12 1 Cucumber Kirby
111 49683 5 1 Cucumber Kirby
reordered 是 1 或 0,表示客户是否在之前的订单中订购了该产品。
我想获取每个产品的信息,例如,我想知道哪些产品的重新订购次数最多(除其他外)。我能想到的唯一方法是遍历数据框,一次只选择一个按产品名称的行,并对每个产品的 reordered 值求和。唯一的问题是大约有 92k 种不同的产品,这会破坏我的计算机并永远占用。这是我的代码。我将结果保存到字典中,但我对其他方法持开放态度。一定有更有效的方法来做到这一点?
reordersums = {}
for product in list(products.product_name):
# Select the rows whose product name matches the product we are checking, sum the values in column "reordered"
reordersum = order_products[order_products.product_name == product].reordered.sum()
reordersums[product]=reordersum
print(reordersums)
【问题讨论】:
-
df[df.reordered==1].groupby('product_name').sum() 这应该可以。试试 Sam,如果没有,您能否分享示例数据以进行一些分析。
-
@Sam,如果您正在寻找答案,请查看答案,或者您可以使用所需的结果更新您的帖子。
-
@AmitAmola 啊,是的,groupby,我怎么会忘记。你的一行代码很简单,很优雅,给了我我需要的东西。谢谢
-
我可以将其添加为答案,您可以投票吗?哈哈@山姆
-
@SamRheault,但如果您的
reordered计数超过 1,请确保这将不起作用所以最好使用带有 lambda 的过滤器,以防值变为1 (==1)或2或任何更高。