From 2789713637dbda721ede59dc3814e65098960397 Mon Sep 17 00:00:00 2001 From: aszerW Date: Thu, 14 May 2026 01:21:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(report):=20=E4=BF=AE=E5=A4=8D=20generate=5F?= =?UTF-8?q?legacy=5Freport=20=E9=87=8D=E5=A4=8D=E6=97=A5=E6=9C=9F=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=20reindex=20=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:nav_series 或 backtest_result.index 存在重复日期时, reindex() 抛出 'cannot reindex on an axis with duplicate labels' 修复: - 先检查并去除 nav_series 的重复日期 - 同时检查并去除 backtest_result.index 的重复日期 - 使用 duplicated(keep='last') 保留最后一条记录 --- scripts/generate_legacy_report.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/generate_legacy_report.py b/scripts/generate_legacy_report.py index ac4ab67..3736bba 100644 --- a/scripts/generate_legacy_report.py +++ b/scripts/generate_legacy_report.py @@ -170,7 +170,14 @@ def run_with_legacy_report(): else: continue # 对齐净值数据到回测日期(使用ffill处理日期差异) - nav_aligned = nav_series.reindex(backtest_result.index, method='ffill') + # 先去除重复日期 + if nav_series.index.has_duplicates: + nav_series = nav_series[~nav_series.index.duplicated(keep='last')] + # 确保 backtest_result.index 无重复 + target_index = backtest_result.index + if target_index.has_duplicates: + target_index = target_index[~target_index.duplicated(keep='last')] + nav_aligned = nav_series.reindex(target_index, method='ffill') etf_nav_data_raw[idx_code] = nav_aligned.values # 生成原引擎格式的报告