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
相关产品推荐
相关产品推荐

