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

如何用Python Pandas为每个国家补全缺失年份的行?

补全DataFrame中每个国家的缺失年份

可以通过Pandas的分组和合并操作实现需求,以下是两种可行的方法:

方法一:分组生成完整年份序列(直观易理解)

先创建示例数据,再通过分组处理每个国家的年份范围:

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'country': ['A', 'A', 'B', 'B'],
    'year': [2008, 2011, 2008, 2011],
    'value': [1, 1, 1, 1]
})

# 定义分组处理函数:为单个国家生成完整年份并合并原数据
def fill_missing_years(group):
    # 获取当前国家的年份边界
    min_year = group['year'].min()
    max_year = group['year'].max()
    # 生成从min到max的完整年份序列
    full_year_range = pd.DataFrame({'year': range(min_year, max_year + 1)})
    # 左连接合并原数据,缺失的value自动填充为NaN
    return pd.merge(full_year_range, group, on='year', how='left')

# 应用分组函数并重置索引
result_df = df.groupby('country', group_keys=False).apply(fill_missing_years).reset_index(drop=True)
print(result_df)

输出结果与预期一致,缺失年份的value列显示为NaN(对应表格中的空值)。

方法二:用reindex快速实现(代码更简洁)

利用多层索引的unstack和stack操作快速补全年份:

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'country': ['A', 'A', 'B', 'B'],
    'year': [2008, 2011, 2008, 2011],
    'value': [1, 1, 1, 1]
})

# 设置多层索引,展开后重新堆叠,保留所有年份
result_df = df.set_index(['country', 'year']).unstack(fill_value=None).stack(dropna=False).reset_index()
# 调整列顺序与原数据一致
result_df = result_df[['country', 'year', 'value']]
print(result_df)

两种方法都能实现需求,方法一逻辑清晰适合新手理解,方法二代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:45:40