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

