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

是否存在Pythonic方法,可迭代分组DataFrame生成各西班牙省份的独立DataFrame

核心问题定位

你之前写的循环代码跑不通的根源有两个:

  • 变量重名冲突:原本用来存计数的数字变量counter,在内部for循环里被直接赋值为筛选得到的DataFrame,后续执行counter -=1时会因为DataFrame无法和整数做减法直接报错
  • 循环逻辑完全错乱:while判断条件的初始值就满足counter <= 分组数+1的要求,条件永远为真,根本没法靠计数器递减逻辑正常退出循环

另外你提到之前用.groupby没达到预期,本质是没有用对groupby的原生迭代能力——pandas的groupby对象天生就是为“按列拆分全量数据为独立子集”的场景设计的,完全不需要自己手写计数器、嵌套循环来实现逻辑。

首选实现方案

用字典存储所有省份对应的独立DataFrame,这是pandas处理分拆数据的标准操作,不会污染全局命名空间,调用和后续维护成本极低:

# 按Provincia列分组,自动遍历所有省份生成子集
province_data_map = {
    province_name: subset_df.reset_index(drop=True) 
    for province_name, subset_df in merged.groupby('Provincia')
}

生成的province_data_map结构为:

  • 键:对应Provincia列里的省份名称(比如'Madrid'、'A Coruña')
  • 值:该省份对应的全量时序子集DataFrame

需要调用某个省份数据时,直接通过键取值即可,比如取马德里数据:

madrid_df = province_data_map['Madrid']

这套逻辑不需要你手动统计有多少个省份,不管是52个还是后续增减省份,代码都不需要修改。

特殊场景实现(不推荐)

如果你确实需要生成和你举例格式一致的全局独立变量(比如Madrid = pd.DataFrame(...)),可以通过Python动态命名空间赋值实现,但必须要处理省份名里的特殊字符——带空格、带重音的西班牙省名本身不是合法的Python变量名,直接赋值会报语法错误:

for prov_name, subset_df in merged.groupby('Provincia'):
    # 清洗省份名为合法Python变量:替换空格、去掉重音符号
    valid_var_name = (
        prov_name.replace(' ', '_')
        .replace('á', 'a')
        .replace('é', 'e')
        .replace('í', 'i')
        .replace('ó', 'o')
        .replace('ú', 'u')
    )
    # 动态给全局变量赋值
    globals()[valid_var_name] = subset_df.reset_index(drop=True)

注意:这种动态生成全局变量的方式维护成本很高,很容易因为变量名拼写错误、特殊字符没处理全踩坑,除非有强制的格式要求,否则优先选择字典存储的方案。

内容的提问来源于stack exchange,提问作者Francisco Barriga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:24:06