Python实现Excel汇总表Lead Time列自动化计算求助
Python 实现 Excel 汇总表的 Lead Time 计算
核心逻辑说明
针对汇总表中每行的 Week2 至 Week32 列,提取最后一个非零值填充到 Lead Time 列。以下是基于 pandas 的稳定实现方案:
完整代码
import pandas as pd # 读取汇总Excel文件(替换为你的文件路径) df = pd.read_excel("汇总文件.xlsx") # 定义需要处理的周数列范围(若列名含空格,改为类似"Week 2"格式) week_cols = [f"Week{i}" for i in range(2, 33)] # 自定义函数:获取单行最后一个非零值 def extract_last_non_zero(row): # 过滤当前行周数列中的非零值 valid_values = row[week_cols][row[week_cols] != 0] # 返回最后一个有效值,无有效值则返回空值(可改为0或其他默认值) return valid_values.iloc[-1] if not valid_values.empty else pd.NA # 应用函数到所有行,生成Lead Time列 df["Lead Time"] = df.apply(extract_last_non_zero, axis=1) # 保存更新后的汇总文件 df.to_excel("更新后的汇总文件.xlsx", index=False)
关键细节
- 列名适配:如果你的周数列名是带空格的格式(如
Week 2),修改week_cols列表为[f"Week {i}" for i in range(2, 33)] - 空值处理:若某行所有周数列均为0,代码返回
pd.NA,可根据需求替换为0或其他默认值 - 性能优化:对于大型数据集,可改用矢量化操作提升速度:
# 矢量化实现(更高效) mask = df[week_cols] != 0 # 获取每行最后一个非零值的列索引 last_non_zero_idx = mask.cumsum(axis=1).idxmax(axis=1) # 根据索引提取对应值 df["Lead Time"] = df.lookup(df.index, last_non_zero_idx) # 处理全零行(替换为pd.NA) df.loc[~mask.any(axis=1), "Lead Time"] = pd.NA
内容的提问来源于stack exchange,提问作者Hari PN
相关产品推荐
相关产品推荐

