如何使用 1 来计算 pandas 数据框中的下一行?

问题描述 投票:0回答:1

我有一个像这样的数据框:

data = {'id':[1,1,1,2,2],
        'prod_type':['A','B','C','A','C'],
        'prod_order':[1,3,2,2,1],
        'prod_price':[100,150,300,10,40]
        'prod_pool':[200,200,200,45,45]
       }

对于 id 标识的每个组,我需要按产品订单订购产品,并用可用池逐行限制价格,但每一步都会消耗产品池。

所以第一行我会得到 id=1, prod_type=A, prod_used=min(prod_price,prod_pool)

然后第二行 id=1, prod_type=C, prod_used=min(prod_price,max(0,prod_pool(productA)-prod_used(productA)))

所以基本上每次产品“使用”部分池时,池就会减少该数量。 池子不能为负数,所以一旦用完就没有剩余,必须为 0。

pandas dataframe
1个回答
1
投票

groupby.apply
与自定义函数一起使用:

def quantity(g):
    # compute the shifted difference
    s = g['prod_pool'].sub(g['prod_price'].shift()).fillna(g['prod_price'])
    # stop at the first negative value
    return s.where(s.gt(0).cummin(), 0)

df['product_used'] = df.groupby('id', group_keys=False).apply(quantity)

输出:

   id prod_type  prod_order  prod_price  prod_pool  product_used
0   1         A           1         100        200         100.0
2   1         C           2         300        200         100.0
1   1         B           3         150        200           0.0
4   2         C           1          40         45          40.0
3   2         A           2          10         45           5.0
© www.soinside.com 2019 - 2024. All rights reserved.