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

如何遍历品牌拆分后的DataFrame并批量执行函数生成Excel?

解决方案:按品牌循环生成专属Excel报表

嘿,我来帮你搞定这个循环实现的问题!你现在的核心需求是把大型数据集按品牌拆分,每个品牌单独生成包含多份统计表格的Excel文件对吧?咱们一步步调整你的代码:

第一步:修复函数的参数问题

你写的表格函数里用了全局变量df_cliente,但参数是df,这会导致循环时每个品牌都用同一个全局数据集,完全达不到拆分的效果。先把所有函数里的df_cliente替换成参数df:

import pandas as pd

def tab_new_born(df):
    # 替换全局变量df_cliente为传入的参数df
    tab_1 = df.astype(str).groupby('definitive_class').agg({'definitive_class': lambda x: x.count()})
    return tab_1

def tab_updated_and_working(df):
    # 替换全局变量df_cliente为传入的参数df
    tab_2 = pd.crosstab((df.FIRMWARE_STATUS_UPDATE == 'updated'), (df.app_trans_features == 1), margins = True)
    tab_2.rename(index = {False : 'no', True : 'yes', 'All' : 'Total'}, 
                 columns = {False : 'no_trans_in_7_last_days', True : 'yes_trans_in_7_last_days','All' : 'Total' }, 
                 inplace= True)
    return tab_2

# 假设你还有以下两个函数,同样要替换全局变量为参数df
def tab_working_and_anomalous(df):
    # 这里填入你的原逻辑,记得用参数df而非全局变量
    pass

def tab_working_and_registry(df):
    # 这里填入你的原逻辑,记得用参数df而非全局变量
    pass

第二步:构建函数与Sheet名的对应列表

把所有生成表格的函数和对应的Sheet名称配对,这样循环时可以批量处理,以后新增表格也只需要在这里加一行:

# 列表每个元素是(生成表格的函数, 对应Sheet名称)的元组
report_tasks = [
    (tab_new_born, 'MHT_classification'),
    (tab_updated_and_working, '#VM_operative'),
    (tab_working_and_anomalous, '#VM_conn_problems_operative'),
    (tab_working_and_registry, '#VM_registry_null')
]

第三步:按品牌循环生成Excel文件

接下来就是核心的循环逻辑:先获取所有唯一品牌,然后逐个筛选数据、生成报表:

# 替换成你数据集中实际的品牌列名称,比如'brand'或'marca'
brand_col = '品牌列名'
# 获取数据集中所有不重复的品牌
all_brands = df[brand_col].unique()

for brand in all_brands:
    # 1. 筛选当前品牌的专属数据集
    brand_data = df[df[brand_col] == brand]
    
    # 处理品牌名中的特殊字符(避免生成Excel文件名报错)
    safe_brand_name = str(brand).replace('/', '_').replace(':', '_').replace('?', '_')
    # 生成当前品牌的Excel文件名
    output_filename = f"{safe_brand_name}_output.xlsx"
    
    # 2. 创建Excel写入器
    writer = pd.ExcelWriter(output_filename, engine='xlsxwriter')
    
    # 3. 循环所有报表任务,生成表格并写入对应Sheet
    for generate_tab, sheet_name in report_tasks:
        result_tab = generate_tab(brand_data)
        result_tab.to_excel(writer, sheet_name=sheet_name)
    
    # 4. 保存并关闭文件
    writer.save()
    writer.close()

关键注意点

  • 参数一致性:一定要确保函数使用传入的df参数,而不是全局变量,这是拆分品牌数据的核心前提。
  • 安全文件名:品牌名里的/、:、?等特殊字符会导致Excel文件无法创建,所以先用replace替换成下划线。
  • 可扩展性:以后要新增报表类型,只需要在report_tasks列表里添加新的(函数, Sheet名)元组即可,不需要修改循环逻辑。

内容的提问来源于stack exchange,提问作者Annamaria Capursi Nappi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:49