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

如何用Pandas补全DataFrame各年份的周数范围并填充数据?

补全DataFrame中各年份的周数

问题背景

现有通过以下代码读取的DataFrame:

import pandas as pd
grouped = pd.read_csv('grouped.csv')

数据结构示例:

Year  Week    Average          m
0    2013    24  29.000000  -0.152174
1    2013    25  22.800000       -6.2
2    2013    26  23.400000        0.6
...
387  2020    53  47.500000   1.785714

需求:将该DataFrame转换为每个年份都包含range(2,54)所有周数的结构,缺失周数对应的Average和m用空值填充。

原尝试的循环填充方法存在重复行、错误赋值等问题,需优化实现。

最优解决方案

利用Pandas的索引生成与合并功能,无需循环即可高效实现需求:

步骤1:生成全量的Year-Week组合

先获取数据中的所有唯一年份,再为每个年份生成2到53的周数(对应range(2,54)),组合成完整的基准DataFrame:

# 获取所有唯一年份
unique_years = grouped['Year'].unique()
# 生成所有需要的Year-Week组合
all_weeks = range(2, 54)
full_index = pd.MultiIndex.from_product([unique_years, all_weeks], names=['Year', 'Week'])
full_df = full_index.to_frame(index=False)

步骤2:与原数据左连接补全

通过左连接将原数据的Average和m字段匹配到全量组合中,缺失周数自动填充为NaN:

result_df = pd.merge(full_df, grouped, on=['Year', 'Week'], how='left')

完整代码

import pandas as pd

# 读取原始数据
grouped = pd.read_csv('grouped.csv')

# 生成全量Year-Week组合
unique_years = grouped['Year'].unique()
all_weeks = range(2, 54)
full_df = pd.MultiIndex.from_product([unique_years, all_weeks], names=['Year', 'Week']).to_frame(index=False)

# 左连接补全数据
result_df = pd.merge(full_df, grouped, on=['Year', 'Week'], how='left')

# 可选:重置索引(如果需要)
result_df = result_df.reset_index(drop=True)

方案优势

  • 避免手动循环赋值的索引计算错误,逻辑更清晰
  • 利用Pandas内置的向量化操作,执行效率远高于循环
  • 自动处理特殊情况(如2020年有53周),无需额外判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:22:52