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

Python DataFrame如何按指定列合并重复行并保留非np.nan值

pandas 按指定列分组合并非空值实现方案

核心实现代码

你可以直接通过分组聚合逻辑完成需求,示例代码如下:
首先导入依赖库:

import pandas as pd
import numpy as np

若你的数据中nan为字符串格式,需先替换为numpy的空值类型:

df = df.replace('nan', np.nan)

执行分组聚合得到结果:

result_df = df.groupby(['id', 'year'], as_index=False).first()

逻辑说明

  • groupby(['id', 'year']) 按指定的id、year两列拆分数据,相同id+年份的行会被归为同一组
  • as_index=False 配置分组键保留为普通列,不会转为DataFrame的索引
  • first() 是pandas内置的聚合函数,会自动跳过列中的np.nan值,取分组内第一个非空有效值;如果分组内某列全为空,返回结果对应位置也会保留np.nan,完全匹配你给出的预期输出。

扩展场景适配

如果同一分组的某列存在多个不同的非空值,你可以按需调整聚合逻辑:

  • 取分组内最后一个非空值:将first()替换为last()
  • 拼接所有非空值:将first()替换为lambda x: '/'.join(x.dropna().astype(str))
  • 对数值列取最大值/最小值/均值:将first()替换为max()/min()/mean()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:39:04