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

如何按列值扩展DataFrame行并解决跨年度周计算报错问题

解决方案

错误原因

math.floor()只能处理单个数值,无法直接作用于Pandas Series(批量数据),这是触发TypeError的核心原因。需要改用支持向量运算的方法实现年份增量计算。

完整实现代码

import pandas as pd
import numpy as np

# 读取数据
df = pd.read_excel("test data.xlsx")

# 1. 按# of weeks扩展每行
df = df.loc[df.index.repeat(df["# of weeks"])].reset_index(drop=True)

# 2. 添加每个Id的周计数列
df['Week Count'] = df.groupby(['Id']).cumcount() + 1 

# 3. 计算每周工时(平均分配为整数)
df['Labor'] = df['Manhours'] // df['# of weeks']

# 4. 计算从起始周开始的累计总周数
total_weeks = df['Starting Week period'] + df['Week Count'] - 1

# 5. 计算年份与年度周数(支持任意跨年场景)
df['Year'] = df['Starting Year'] + (total_weeks - 1) // 52
df['Week #'] = (total_weeks - 1) % 52 + 1

# 6. 为Week #添加前导0
df['Week #'] = df['Week #'].astype(str).str.pad(2, side='left', fillchar='0')

# 7. 拼接Year与Week #生成Period列
df['Period'] = df['Year'].astype(str) + "-" + df['Week #']

关键逻辑说明

  • 年份计算:(total_weeks - 1) // 52 计算需要增加的年份数,例如第53周时得到1(年份+1),第105周时得到2(年份+2),完美支持跨多年的场景。
  • 年度周数计算:(total_weeks - 1) % 52 + 1 实现周数的循环重置,例如第53周返回1,第105周返回3,符合年度周数的计数规则。
  • 工时计算:用整数除法//保证结果为整数,与示例输出一致;若需保留小数,替换为普通除法/即可。

验证结果

运行上述代码后,你的示例数据会生成与目标完全一致的输出,同时可处理跨2年及以上的极端场景(比如起始周为50、周数为10的情况,会覆盖2023年第50-52周、2024年第1-7周)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:46:07