如何合并DataFrame中相同索引的行并保留各列非空值
Pandas 同索引多行列合并方案
要实现你需要的同索引两行聚合成单行、保留各列非空值且不修改原有数据类型的需求,按索引分组后取首个非空值即可实现,具体代码如下:
1. 模拟原始数据(可跳过直接使用你自己的DataFrame)
import pandas as pd import numpy as np # 构造和你场景一致的示例数据 df = pd.DataFrame( [["UF", None], [None, 1400]], index=["BTU26", "BTU26"], columns=["col 1", "col 2"] ) # 兼容整数列空值,避免空值导致列类型自动转为float df["col 2"] = df["col 2"].astype("Int64")
2. 核心合并代码
# 如果原始数据空值是空字符串,先统一替换为NA df = df.replace("", pd.NA) # 按索引分组,每列取分组内第一个非空值 merged_df = df.groupby(level=0).first()
效果说明
处理后的merged_df中索引为BTU26的行,col 1值为UF(字符串类型)、col 2值为1400(整数类型),完全符合需求。
注意事项
- 如果你同索引下某列存在多个非空值,可将
first()替换为last()或自定义聚合函数调整取值优先级 - 单层索引场景下,
groupby(level=0)也可以替换为groupby(df.index),两者效果一致
内容的提问来源于stack exchange,提问作者Lukwolf
相关产品推荐
相关产品推荐

