0

我有一个熊猫数据框,其结构如下所示:

| Contract |Purchase Date|Value|Expiration Date|Demand|Stock
| A        | 2019-01-01  |1000 | 2019-01-04    |700   | 300
| B        | 2019-01-02  |1000 | 2019-01-05    |1000  | 300
| C        | 2019-01-03  |1000 | 2019-01-06    |1200  | 100 
| D        | 2019-01-04  |1000 | 2019-01-07    |1000  | 100
| E        | 2019-01-05  |1000 | 2019-01-08    |1000  | 0
| F        | 2019-01-06  |1000 | 2019-01-09    |800   | 200
| G        | 2019-01-07  |1000 | 2019-01-10    |1000  | 200

“需求”栏代表每日需求量,“合同”栏代表为满足需求而购买的每日数量。这些合同有一个到期日。系统按以下方式工作:

  • 当需求低于合同时,剩余的交易量将进入“库存”列(如示例的第一行)。

  • 当需求高于合同并且存在正库存时,它用于满足需求(如第 3 行)。在这里,我们使用 FIFO 方法。也就是说,只要没有过期,第一个购买的合约就是第一个出去的(如第5行)。

所以,我需要的是自动从库存中删除到期的金额,同时当需求高于遵循先进先出方法的合同时库存自动减少。

我是 python 新手,找不到适合我的方法。我很感激你有任何想法。

为了清楚起见,我不是在寻找您为我编写代码,而是在寻找可以处理此操作的适当库。我知道我应该为 FIFO 部分使用双端队列对象(这里也有很多关于这方面的信息),但不知道如何处理到期日期。

4

1 回答 1

0

尝试:

import pandas as pd
dates = pd.date_range(start='2005-1-1', end='2014-12-31', freq='D')

for each in dates:
    if each.month==expire_month and each.day ==expire_day:
        df.drop(df.columns[[0,1,3]], axis=1, inplace=True) #You can select your own columns such as stock

对于先进先出:

df.shift(1)
df.loc[0] = new_row

df.shift(n) 将行 n 次移动,用 'na' 填充前 n 行并删除最后 n 行。df的行数不会随df.shift改变。

于 2019-06-28T15:47:43.093 回答