import pandas as pd from pathlib import Path def resolve_path(project_root: Path, relative_path: str) -> Path: return project_root / relative_path def load_all_units_cycles(cfg: dict) -> pd.DataFrame: """ 读取所有启用 UF 机组的 filtered_cycles 数据, 返回【物理周期层级】的合并 DataFrame。 """ project_root = Path(cfg["Paths"]["project_root"]) raw_cfg = cfg["Paths"]["raw_data"] all_dfs = [] for unit in raw_cfg["enabled_units"]: file_name = raw_cfg["cycle_file_pattern"].format(unit=unit) file_path = resolve_path( project_root, raw_cfg["filtered_cycles_dir"] ) / file_name if not file_path.exists(): raise FileNotFoundError(f"未找到 UF{unit} 数据文件: {file_path}") df_unit = pd.read_csv(file_path) df_unit["unit_id"] = unit # 仅用于分组,不进入状态 all_dfs.append(df_unit) return pd.concat(all_dfs, ignore_index=True)