You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对齐DataFrame中不同起止年份的DRG数据列?

解决DRG数据年份列对齐与数据覆盖问题

一、先解决“仅保留最后一项数据”的问题

你当前的问题核心是每次爬取单个DRG组数据后直接覆盖了之前的DataFrame,导致最终只留存最后一组数据。解决思路是先批量收集所有DRG组的DataFrame,再统一处理:

  • 初始化空列表存储每组数据:
    import pandas as pd
    
    # 存储所有DRG组数据的容器
    drg_data_list = []
    
    # 伪代码:你的DRG组爬取循环
    for drg_code in target_drg_groups:
        # 爬取当前DRG组数据并转换为DataFrame(需确保df包含DRG标识列和年份列)
        df = fetch_drg_data(drg_code)
        # 将当前组数据加入列表,避免覆盖
        drg_data_list.append(df)
    

二、对齐不同DRG组的年份列

不同DRG组的年份范围存在差异,需先整理出所有出现过的年份,再将每个DRG组的DataFrame按统一年份列重新索引:

  1. 提取所有出现过的年份:
    # 遍历所有DataFrame,收集所有年份列(假设年份列是'2014'、'2015'这类数字格式)
    all_years = set()
    for df in drg_data_list:
        # 筛选年份列(非年份列假设只有DRG标识,比如'drg_code',可根据实际调整)
        year_cols = [col for col in df.columns if str(col).isdigit()]
        all_years.update(year_cols)
    # 排序得到有序的年份列列表
    all_years = sorted(all_years)
    
  2. 对每个DRG组的DataFrame做列对齐:
    aligned_dfs = []
    for df in drg_data_list:
        # 保留DRG标识列,补充缺失的年份列,缺失值用NaN填充
        aligned_df = df.reindex(columns=['drg_code'] + all_years)
        aligned_dfs.append(aligned_df)
    
  3. 合并所有对齐后的DataFrame:
    final_aligned_df = pd.concat(aligned_dfs, ignore_index=True)
    

三、输出到Excel(多工作表)和CSV

  • 输出CSV:
    final_aligned_df.to_csv('drg_aligned_data.csv', index=False, encoding='utf-8-sig')
    
  • 输出多工作表Excel:
    with pd.ExcelWriter('drg_aligned_data.xlsx') as writer:
        # 工作表1:完整对齐数据
        final_aligned_df.to_excel(writer, sheet_name='完整对齐数据', index=False)
        # 工作表2:DRG分组统计(示例)
        drg_summary = final_aligned_df.groupby('drg_code').sum(numeric_only=True)
        drg_summary.to_excel(writer, sheet_name='DRG分组统计')
        # 工作表3:年度数据汇总(示例)
        year_summary = final_aligned_df[all_years].sum().to_frame('年度总量').T
        year_summary.to_excel(writer, sheet_name='年份汇总')
    

额外适配说明

  • 如果年份列是带后缀的格式(比如'2014年'),可以用正则提取年份:
    import re
    year_cols = [re.findall(r'\d{4}', col)[0] for col in df.columns if re.search(r'\d{4}', col)]
    
  • 缺失值可根据业务需求填充为0、空字符串等,用aligned_df.fillna(0, inplace=True)即可。

内容的提问来源于stack exchange,提问作者Michael Wiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:37:02