gpt4 book ai didi

python - 比 for 循环更快地选择数据帧的不同部分的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:21 25 4
gpt4 key购买 nike

我有一个 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,表示客户是否在之前的订单中订购过该产品。

我想获取每个产品的信息,例如我想知道哪些产品的再订购次数最多(除其他外)。我能想到的唯一方法是迭代数据帧,一次仅按产品名称选择行,并对每个产品重新排序的值求和。唯一的问题是大约有 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)

最佳答案

请尝试以下操作,但我不确定这是否是您正在寻找的:

您所图示的 DataFrame 结构:

   order_id  product_id  add_to_cart_order  reordered    product_name
0 32 49683 7 1 Cucumber Kirby
1 52 49683 4 1 Cucumber Kirby
2 88 49683 20 0 Cucumber Kirby
3 95 49683 12 1 Cucumber Kirby
4 111 49683 5 1 Cucumber Kirby

解决方案: groupby + DataFrame.filter + sum()

>>> df.groupby('reordered').filter(lambda x: len(x) > 1).groupby(['product_name']).sum().reset_index()
product_name order_id product_id add_to_cart_order reordered
0 Cucumber Kirby 290 198732 28 4

OR ,按照@Amit 在评论部分中的建议。

>>> df[df.reordered==1].groupby('product_name').sum().reset_index()
product_name order_id product_id add_to_cart_order reordered
0 Cucumber Kirby 290 198732 28 4

,如果您只想查看product_name重新排序

df.set_index('product_name').reordered.ge(1).sum(level=0).astype(int).reset_index()
product_name reordered
0 Cucumber Kirby 4

关于python - 比 for 循环更快地选择数据帧的不同部分的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com