如何合并Pandas DataFrame中含稀疏值的多行数据?
Pandas合并稀疏DataFrame的解决方法
针对按Name合并多行稀疏数据、用后续非空值替换空值且同列多有效值保留最后一个的需求,有两种简洁的实现方式:
方法一:向后填充+取分组最后一行
利用bfill()向后填充空值,再取每组最后一行即可得到目标结果:
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ 'Name': ['A', 'A', 'A'], 'ParamA': [1.0, np.nan, np.nan], 'ParamB': [np.nan, np.nan, np.nan], 'ParamC': [np.nan, 3.0, np.nan], 'ParamD': [np.nan, np.nan, 6.0] }) # 分组处理 result = df.groupby('Name').apply(lambda x: x.bfill().iloc[-1]).reset_index(drop=True)
原理:bfill()会将每列的空值用后续行的非空值覆盖,填充后每组的最后一行自然包含所有可用的非空值,且同列存在多个有效值时,最后一个会被保留。
方法二:分组聚合取最后一个非空值
直接对每个分组的列进行聚合操作,提取最后一个非空值:
result = df.groupby('Name').agg( lambda x: x.dropna().iloc[-1] if not x.dropna().empty else np.nan ).reset_index()
原理:对每个分组的每列,先过滤掉空值,若剩余有效值则取最后一个;若列全为空则保留NaN,精准匹配需求。
两种方法最终输出的结果均符合预期:
| Name | ParamA | ParamB | ParamC | ParamD |
|---|---|---|---|---|
| A | 1.0 | NaN | 3.0 | 6.0 |
内容的提问来源于stack exchange,提问作者gfib
相关产品推荐
相关产品推荐

