Skip to main content
 首页 » 编程设计

python之Pandas 将 cumsum 拆分为上限,然后在不同的列中继续使用余数

2024年08月12日55jiqing9006

我有一个 DataFrame 这样:

            Amt  
Date   
01/01/2000  10     
01/02/2000  10     
01/03/2000  10     
01/04/2000  10     
01/05/2000  10     
01/06/2000  10     
01/07/2000  10 

现在假设我有两个存储设备来存储我购买的产品的Amt; Storage 1 的上限为 22.5,而 Storage 2 的容量为 30。我想将这两个添加为列,并将它们的总和累加到SPLIT 数量的 Amt(每 10 个,每个 5 个)。一旦 Storage 1 达到容量,我希望剩余部分进入 Storage 2 直到它变满,此时剩余部分将进入 第三个​​ 列,卖出。在此之后,Amt 可以继续在 Sell 列中累积 DataFrame 的剩余部分,这样输出将如下所示:

            Amt | Storage 1 | Storage 2 | Sell | 
Date   
01/01/2000  10    5           5           0 
01/02/2000  10    10          10          0 
01/03/2000  10    15          15          0 
01/04/2000  10    20          20          0 
01/05/2000  10    22.5        27.5        0 
01/06/2000  10    22.5        30          7.5 
01/07/2000  10    22.5        30          17.5 

我知道 cumsum,但我不确定如何为其设置条件,也不知道如何在存储已满的情况下检索剩余值。

如果不清楚,我深表歉意。如果我遗漏了任何必要的信息,请告诉我。提前致谢。

请您参考如下方法:

使用np.select获取存储量:

s = df["Amt"].cumsum() 
 
df["Storage 1"] = np.select([s<=45, s>45], 
                            [s/2,22.5]) 
df["Storage 2"] = np.select([s<=52.5, s>52.5], 
                            [s-df["Storage 1"], 30]) 
 
df["Sell"] = s-df["Storage 1"]-df["Storage 2"] 
 
print (df) 
# 
 
            Amt  Storage 1  Storage 2  Sell 
Date 
01/01/2000   10        5.0        5.0   0.0 
01/02/2000   10       10.0       10.0   0.0 
01/03/2000   10       15.0       15.0   0.0 
01/04/2000   10       20.0       20.0   0.0 
01/05/2000   10       22.5       27.5   0.0 
01/06/2000   10       22.5       30.0   7.5 
01/07/2000   10       22.5       30.0  17.5