如何将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())
核心调整说明
- 新增
week_cols变量自动筛选所有周列,不管有多少周数据都可以自动适配 - 提供两种日列命名规则,可根据自己的输出需求选择
- 把原代码中硬编码的
row["Week1"]替换为当前遍历的周列取值,实现批量处理
内容的提问来源于stack exchange,提问作者SL22122406
相关产品推荐
相关产品推荐

