上传文件至 /
This commit is contained in:
commit
8649775924
68
match2.py
Normal file
68
match2.py
Normal file
@ -0,0 +1,68 @@
|
||||
import pandas as pd
|
||||
|
||||
# 读取数据
|
||||
df_open = pd.read_excel("opendemo1.xlsx")
|
||||
df_close = pd.read_excel("closedemo1.xlsx")
|
||||
|
||||
# 清洗并准备数据
|
||||
df_open["Trade_Shares"] = df_open["Trade_Shares"].astype(int)
|
||||
df_close["Trade_Shares"] = df_close["Trade_Shares"].astype(int).abs()
|
||||
|
||||
# 分组
|
||||
grouped_open = df_open.groupby("check_str")
|
||||
grouped_close = df_close.groupby("check_str")
|
||||
|
||||
matched_rows = []
|
||||
|
||||
def match_shares(open_rows, close_rows):
|
||||
open_iter = iter(open_rows.to_dict("records"))
|
||||
close_iter = iter(close_rows.to_dict("records"))
|
||||
current_open = next(open_iter, None)
|
||||
current_close = next(close_iter, None)
|
||||
|
||||
while current_open and current_close:
|
||||
open_shares = current_open["Trade_Shares"]
|
||||
close_shares = current_close["Trade_Shares"]
|
||||
matched_shares = min(open_shares, close_shares)
|
||||
|
||||
open_row_copy = current_open.copy()
|
||||
open_row_copy["Trade_Shares"] = matched_shares
|
||||
|
||||
close_row_copy = current_close.copy()
|
||||
close_row_copy["Trade_Shares"] = matched_shares
|
||||
close_row_copy = {f"{k}_close": v for k, v in close_row_copy.items()}
|
||||
|
||||
combined_row = {**open_row_copy, **close_row_copy}
|
||||
matched_rows.append(combined_row)
|
||||
|
||||
current_open["Trade_Shares"] -= matched_shares
|
||||
current_close["Trade_Shares"] -= matched_shares
|
||||
|
||||
if current_open["Trade_Shares"] == 0:
|
||||
current_open = next(open_iter, None)
|
||||
if current_close["Trade_Shares"] == 0:
|
||||
current_close = next(close_iter, None)
|
||||
|
||||
# 如果还有未匹配完的开仓
|
||||
while current_open:
|
||||
if current_open["Trade_Shares"] > 0:
|
||||
open_row_copy = current_open.copy()
|
||||
# 留下剩余数量
|
||||
unmatched_row = open_row_copy.copy()
|
||||
unmatched_row["Trade_Shares"] = open_row_copy["Trade_Shares"]
|
||||
# 添加对应的空_close列
|
||||
for col in close_rows.columns:
|
||||
unmatched_row[f"{col}_close"] = None
|
||||
matched_rows.append(unmatched_row)
|
||||
current_open = next(open_iter, None)
|
||||
|
||||
# 处理所有check_str
|
||||
common_keys = set(grouped_open.groups.keys()) & set(grouped_close.groups.keys())
|
||||
for key in common_keys:
|
||||
open_rows = grouped_open.get_group(key)
|
||||
close_rows = grouped_close.get_group(key)
|
||||
match_shares(open_rows, close_rows)
|
||||
|
||||
# 保存结果
|
||||
df_matched = pd.DataFrame(matched_rows)
|
||||
df_matched.to_excel("D:/wangzhiming/match1.xlsx", index=False)
|
Loading…
x
Reference in New Issue
Block a user