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

如何在Pandas DataFrame中遍历唯一日期生成新DataFrame并创建全局变量

解决方案

核心实现思路

利用Pandas布尔索引拆分原DataFrame,通过globals()字典在函数内批量创建全局变量——这是循环生成全局变量最简便的方式,无需逐个声明global关键字。

完整代码示例

1. 构造原DataFrame

import pandas as pd

# 初始化原始数据
data = {
    'Date': ['202107', '202107', '202108', '202108', '202108', '202109', '202109'],
    'Col1': [1.23, 1.56, 1.78, 1.53, 1.58, 1.09, 1.07],
    'Col2': [6.72, 2.54, 7.54, 7.43, 2.54, 2.43, 5.32]
}
df = pd.DataFrame(data)

2. 函数内循环生成全局变量与子DataFrame

def split_and_create_globals():
    # 获取所有唯一日期
    unique_dates = df['Date'].unique()
    
    for date in unique_dates:
        # 生成对应日期的子DataFrame(用copy避免视图修改影响原数据)
        sub_df = df[df['Date'] == date].copy()
        
        # 创建子DataFrame全局变量(命名格式:df_日期,如df_202107)
        globals()[f'df_{date}'] = sub_df
        # 创建值为当前日期的全局变量(命名格式:date_日期,如date_202107)
        globals()[f'date_{date}'] = date
        
        # 此处可添加后续计算逻辑,直接使用sub_df和date变量
        print(f"已生成全局变量:df_{date}、date_{date}")
        print(sub_df, "\n")

3. 调用函数执行

split_and_create_globals()

关键说明

  • globals()的作用:函数内部直接赋值的变量是局部变量,通过globals()字典可以直接向全局命名空间添加键值对,实现循环创建全局变量的需求。
  • copy()的必要性:布尔索引返回的是原DataFrame的视图,使用copy()可以生成独立的子DataFrame,避免后续修改子数据影响原DataFrame。
  • 命名规范:采用df_日期和date_日期的命名格式,避免与现有全局变量冲突,也便于后续识别调用。

简化版(若仅需单个全局日期变量)

如果后续计算不需要保留每个日期的独立日期变量,仅需在循环中更新一个全局日期变量,可修改为:

def split_and_create_globals():
    global current_date  # 声明全局变量
    unique_dates = df['Date'].unique()
    
    for date in unique_dates:
        sub_df = df[df['Date'] == date].copy()
        globals()[f'df_{date}'] = sub_df
        current_date = date  # 每次循环更新全局日期变量
        
        # 后续计算可直接使用sub_df和current_date
        print(f"当前全局日期变量current_date:{current_date}")
        print(sub_df, "\n")

内容的提问来源于stack exchange,提问作者Dr.Data

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24