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

如何在Pandas DataFrame中向前填充库存编码对应年份至2022年

解决Pandas库存编码年份填充问题

需求说明

现有包含period(年份)和inventory code(库存编码)的DataFrame,需要为每个库存编码从其首次出现的起始年份开始,补充后续年份直到2022年,不回溯填充起始年份之前的年份(比如2019年出现的编码,不需要补2018年的行)。

实现步骤及代码

1. 准备测试数据

先还原示例数据:

import pandas as pd
list_year = [2018, 2018, 2019, 2020, 2020, 2021, 2021, 2022]
list_inv = ['TTO', 'TZA', 'OMN', 'RUS', 'SUR', 'TUR', 'USA', 'VAT']

df_test = pd.DataFrame({'period': list_year, 'inventory code': list_inv})

2. 提取每个库存编码的起始年份

通过分组聚合,找到每个编码首次出现的年份:

# 分组计算每个库存编码的最小年份(即起始年份)
start_years = df_test.groupby('inventory code')['period'].min().reset_index()

3. 生成完整年份序列并展开

对每个编码,生成从起始年份到2022的年份列表,再通过explode将列表拆分为多行:

# 为每个编码生成从起始年到2022的年份序列
start_years['period'] = start_years.apply(
    lambda row: list(range(row['period'], 2023)),  # 2023是开区间,最终会包含2022
    axis=1
)

# 展开年份序列,整理得到最终结果
result_df = start_years.explode('period') \
    .sort_values(['inventory code', 'period']) \
    .reset_index(drop=True)

4. 验证结果

查看处理后的DataFrame,以OMN为例,它的起始年份是2019,结果中会包含2019-2022的所有年份,不会出现2018年的行,完全符合需求。

补充说明

如果目标年份不是固定2022,可以把代码中的2023替换为target_year + 1,让代码更灵活。比如目标年份是2025,就改成range(row['period'], 2026)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:35:34