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

如何将pandas DataFrame的各周列拆分为日维度列并逐行赋值

解决方案

调整思路

  • 先自动识别DataFrame中所有前缀为Week的周维度列,无需手动指定周数,适配100+列的处理需求
  • 可选择两种日列生成规则:每一周对应独立的7个日列,或所有周合并生成连续的7*N个日列
  • 保留原有代码的拆分逻辑,仅在外层增加周列的遍历即可适配所有周的处理

完整可运行代码

import pandas as pd

# 示例数据,可替换为自己的DataFrame
df = pd.DataFrame({
    "Week1": [9, 30, 35, 65],
    "Week2": [20, 10, 25, 55],
    "Week3": [19, 35, 40, 15],
    "Week4": [7, 10, 70, 105]
})

# 1. 自动筛选所有周维度列,无需手动输入周数
week_cols = [col for col in df.columns if col.startswith('Week')]

# 2. 遍历每一个周列做拆分处理
for week_col in week_cols:
    # ---------- 列名生成二选一,根据自己的需求调整 ----------
    # 选项1:每一周对应独立日列,命名格式Wx_Dy(第x周第y天)
    week_no = week_col.replace('Week', '')
    day_cols = [f"W{week_no}_D{i}" for i in range(1, 8)]
    
    # 选项2:生成连续日列,命名格式Dayx(第1天到第7*N天,匹配原代码注释的col1-col28需求)
    # week_idx = week_cols.index(week_col)
    # day_cols = [f"Day{week_idx*7 + i}" for i in range(1, 8)]
    # -----------------------------------------------------
    
    # 复用原有拆分逻辑,仅将硬编码的Week1替换为当前遍历的周列
    for indx, row in df.iterrows():
        # 初始化日列基础值
        for num, col in enumerate(day_cols):
            df.loc[indx, col] = 1 if num + 1 <= row[week_col] else 0
        
        # 处理余数叠加
        remainder = row[week_col] - 7
        while remainder > 0:
            for num, col in enumerate(day_cols):
                if num + 1 <= remainder:
                    df.loc[indx, col] += 1
            remainder -= 7

# 输出结果验证
print(df.head())

核心调整说明

  1. 新增week_cols变量自动筛选所有周列,不管有多少周数据都可以自动适配
  2. 提供两种日列命名规则,可根据自己的输出需求选择
  3. 把原代码中硬编码的row["Week1"]替换为当前遍历的周列取值,实现批量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:04