diff --git a/src/core/algorithms/concentration_inversion.py b/src/core/algorithms/concentration_inversion.py index b93d8f5..a6bbb0e 100644 --- a/src/core/algorithms/concentration_inversion.py +++ b/src/core/algorithms/concentration_inversion.py @@ -622,6 +622,11 @@ class ConcentrationPipeline: if "bb_lambda" not in df.columns: df["bb_lambda"] = np.nan + # ── 保留原始坐标列:按 sample_id 取第一条记录的非光谱列 ─────────── + wl_col = "Wavelength" + coord_meta_cols = [c for c in df.columns if c not in (sample_id_col, wl_col, "a_lambda", "bb_lambda")] + coord_df = df.groupby(sample_id_col, sort=False)[coord_meta_cols].first().reset_index() + df = df.sort_values([sample_id_col, "Wavelength"]) results = [] @@ -657,6 +662,9 @@ class ConcentrationPipeline: results.append(row) out_df = pd.DataFrame(results) + # ── 将原始坐标列按 sample_id 合并到浓度结果左侧 ─────────────────── + if not coord_df.empty and sample_id_col in coord_df.columns: + out_df = coord_df.merge(out_df, on=sample_id_col, how="left") os.makedirs(os.path.dirname(output_csv) or ".", exist_ok=True) out_df.to_csv(output_csv, index=False, float_format="%.6f") return output_csv \ No newline at end of file