You need to enable JavaScript to run this app. 如何使用pandas按分组获取各列按年份考虑NaN的最新非空值?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas按分组获取各列按年份考虑NaN的最新非空值?

Pandas 实现方法

核心实现逻辑

要实现“每个Name分组下,按年份维度取COL1/COL2/COL3的最新非NaN值”的需求,核心是两点:

  • 保证每个Name组内的行按年份从小到大排序,确保行顺序和年份新旧完全对应
  • 对分组后的每个数值列,直接提取组内最后一个非缺失值,该值就是对应列最新的非NaN值

具体实现代码

  1. 首先对原数据框做排序,避免原数据行顺序混乱导致取值错误:
df_sorted = df.sort_values(by=["Name", "Year"], ascending=[True, True])
  1. 按Name分组,仅针对需要提取的COL1、COL2、COL3三列,取组内最后一个非空值,最后将分组后的Name重置为普通列即可得到目标结果:
result = df_sorted.groupby("Name")[["COL1", "COL2", "COL3"]].last().reset_index()

结果校验

按照上述代码运行后,输出结果将和题目要求的目标数据框完全一致:

NameCOL1COL2COL3
A15.50161014214
B19.301610NaN
C22.7420271810

注意事项

  • 排序步骤是必须项:如果原数据在Name组内的行顺序不是按年份升序排列,直接取值会错位,必须通过sort_values保证行顺序和年份新旧一致。
  • 该方法为pandas内置的向量化计算逻辑,相比逐行遍历、apply自定义函数的实现方式,在大体积数据集上的运行效率要高很多。
  • groupby.last()默认会自动跳过NaN值,仅当列在整个分组内全为NaN时,才会返回缺失值,和需求规则完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 11:45:04