Python循环处理多指标时间序列时自动重命名DataFrame的方法
处理方案
推荐实现方式:字典存储结果
这种方式不会污染全局命名空间,后续批量操作、代码调试都更方便,是Python处理这类场景的最佳实践。
完整代码示例
# 1. 定义你所有的15个指标类别 categories = ['sales', 'construction'] # 补全剩余13个指标即可 # 2. 封装你现有的处理逻辑为可复用函数 def process_single_category(cat_name, original_df): # 筛选当前指标对应的列 df_m = original_df.loc[:, original_df.columns.str.contains(f'{cat_name}.*Monthly|Monthly.*{cat_name}')] df_ytd = original_df.loc[:, original_df.columns.str.contains(f'{cat_name}.*YTD|YTD.*{cat_name}')] # 沿用你已验证可用的转换逻辑 df_ytd = df_ytd.fillna(method='bfill', limit=1) df_ytd.loc[df_ytd.index.month.isin([1,2]), :] = df_ytd / 2 df_ytd.columns = df_ytd.columns.str.replace(', YTD', '') df_m.columns = df_m.columns.str.replace('YTD, ', '').str.replace(', Monthly', '') df_m = df_m.fillna(df_ytd) df_yoy = df_m.pct_change(periods=12) * 100 return df_m, df_yoy # 3. 循环处理所有指标,存入字典 result_store = {} for cat in categories: single_m, single_yoy = process_single_category(cat, df) result_store[f'{cat}_m'] = single_m result_store[f'{cat}_yoy'] = single_yoy
结果调用
处理完成后,通过result_store['sales_m']、result_store['sales_yoy']即可访问对应指标的处理结果。
可选实现:直接生成独立变量
如果你确实需要直接用sales_m、construction_yoy这类变量名访问结果,可在上述代码最后添加一行将字典内容同步到全局命名空间:
globals().update(result_store)
注意:该方式不推荐,动态生成的变量没有IDE代码提示,容易出现拼写错误、变量冲突等问题。
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

