如何用Pandas合并重复行并以有效值填充NaN空单元格?
Pandas合并分组填充NaN实现方案
实现思路
按指定的4个维度字段分组后,对数值字段取分组内第一个非空值即可完成空值填充与去重合并,注意分组时要保留包含NaN的分组,避免合法数据被过滤。
完整可运行代码
依赖导入
import pandas as pd import numpy as np
构造示例DataFrame
df = pd.DataFrame( { "type": ["E/2", "E/2", "E/2", "E/2"], "subtype1": ["N2", "N2", "N2", "N2"], "subtype2": ["a", "a", "b", np.nan], "subtype3": [np.nan, np.nan, np.nan, "xxx"], "flex_best": [20, np.nan, 20, np.nan], "flex_worst": [np.nan, 30, np.nan, 30], "lead_best": [23, np.nan, 23, np.nan], "is_best": [1, np.nan, 1, np.nan], "lead_worst": [np.nan, 33, np.nan, 33], "is_worst": [np.nan, 1, np.nan, 1], } )
核心处理逻辑
# 定义分组维度字段 group_keys = ["type", "subtype1", "subtype2", "subtype3"] # 分组聚合:dropna=False保留分组键含NaN的组,first()自动取组内第一个非空值 result = df.groupby(group_keys, dropna=False).first().reset_index()
输出验证
打印result即可得到目标DataFrame:
| type | subtype1 | subtype2 | subtype3 | flex_best | flex_worst | lead_best | is_best | lead_worst | is_worst |
|---|---|---|---|---|---|---|---|---|---|
| E/2 | N2 | a | NaN | 20 | 30 | 23 | 1 | 33 | 1 |
| E/2 | N2 | b | NaN | 20 | NaN | 23 | 1 | NaN | NaN |
| E/2 | N2 | NaN | xxx | NaN | 30 | NaN | NaN | 33 | 1 |
内容的提问来源于stack exchange,提问作者Vega
相关产品推荐
相关产品推荐

