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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:06