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

Pandas DataFrame 如何提取NUTS3级人口数据每行的最新年份有效值

实现思路

你的数据中年份列默认按从新到旧排序,核心逻辑为逐行提取首个非空有效值,操作步骤如下:

  • 筛选所有纯年份列,排除region等非统计列
  • 按行方向从左到右(对应年份从新到旧)查找第一个非空值,即为对应地区的最新有效数据
  • 拼接region列和提取到的最新值列,得到目标结果
代码实现

首先引入依赖并构造示例数据:

import pandas as pd
import numpy as np

# 构造和你示例结构一致的测试数据
df = pd.DataFrame({
    "region": ["AT201", "AB301", "AB302"],
    "2015": [101, np.nan, np.nan],
    "2014": [100, 123, np.nan],
    "2013": [np.nan, 456, 234]
})

核心处理代码:

# 筛选所有年份列,可根据你实际的列名规则调整筛选条件
year_cols = [col for col in df.columns if col != "region"]
# 按行向后填充,最左列会被填充为该行第一个非空值,直接取第一列即可
df["newest_data"] = df[year_cols].bfill(axis=1).iloc[:, 0]
# 输出目标结构的结果
result = df[["region", "newest_data"]]

补充说明

如果你的年份列是按从旧到新的顺序排列,将上述代码中的bfill替换为ffill,同时将取列的逻辑改为iloc[:, -1]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:01