我正在尝试使用 python 来帮助我将销售和采购合同与实际的货物收集和交付相匹配。 S&P 合同的规模与货物的实际 C&D 不同,因此手动匹配可能会很繁琐,因为需要匹配产品类型、买方和供应商信息、价格、合同月份等因素。所以我现在面临两个问题。
首先,已经撮合的合约(例如:初始尺寸10吨,我之前已经撮合过,净仓位为0)仍然撮合不止一次。
从图片中可以看到合约号 30831 已被匹配,总大小为 6.17,所以按理说应该不会再匹配了。
数字到小数点都是正确的,但小数点后的数字经常不正确。
这是代码。让我知道我应该修改哪一部分。
https://drive.google.com/file/d/1CjJdIhertbNeDF4qBEzD6_9nrHnJvKzF/view?usp=sharing
这可能是一个解决方案的指针,基于具有许多重复金额的虚构数据。
# Note that these two modules are imported
import pandas as pd
import numpy as np
假设您有一个包含到期日期和到期金额的账户数据框(df)
Date due Acct Due
0 2024-01-01 1001 100
1 2024-02-01 1001 100
2 2024-03-01 1001 100
3 2024-04-01 1001 100
4 2024-05-01 1001 100
5 2024-01-01 1002 90
6 2024-02-01 1002 90
7 2024-03-01 1002 90
8 2024-04-01 1002 90
9 2024-05-01 1002 90
以及订单已结算的数据框(df1)
Date Acct Settled
0 2024-01-15 1001 100
1 2024-02-15 1001 100
2 2024-03-15 1001 100
3 2024-04-15 1001 100
4 2024-01-03 1002 120
5 2024-02-03 1002 120
6 2024-03-03 1002 120
7 2024-04-03 1002 120
选项 1(在账户级别获取余额):
df_sum = df.groupby(["Acct"]).sum().reset_index()
df1_sum = df1.groupby(["Acct"]).sum().reset_index()
df_sum = df_sum.merge(df1_sum, left_on = ["Acct"], right_on = ["Acct"], how = 'left')
df_sum["Bal"] = df_sum["Due"] - df_sum["Settled"]
df_sum
Acct Due Settled Bal
0 1001 500 400 100
1 1002 450 480 -30
选项2:在交易层面获取余额
df['CS'] = df.groupby(['Acct'])['Due'].cumsum()
df = df.merge(df1_sum, left_on = ["Acct"], right_on = ["Acct"], how = 'left')
df["LineSettled"] = np.where(df["CS"] <= df["Settled"], "Y", "N")
df
Date due Acct Due CS Settled LineSettled
0 2024-01-01 1001 100 100 400 Y
1 2024-02-01 1001 100 200 400 Y
2 2024-03-01 1001 100 300 400 Y
3 2024-04-01 1001 100 400 400 Y
4 2024-05-01 1001 100 500 400 N
5 2024-01-01 1002 90 90 480 Y
6 2024-02-01 1002 90 180 480 Y
7 2024-03-01 1002 90 270 480 Y
8 2024-04-01 1002 90 360 480 Y
9 2024-05-01 1002 90 450 480 Y