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

如何合并含NaN的Pandas DataFrame,填充缺失值且不重复行?

解决DataFrame缺失值互相填补的合并问题

你需要的是让两个DataFrame按行索引对齐,用彼此的非缺失值填补对方的空缺,而非简单拼接导致重复行。最直接高效的方法是使用Pandas的combine_first()方法:

示例代码

import pandas as pd

# 构建你提供的示例数据
df1 = pd.DataFrame({'color': {1: 'b'}}).T
df2 = pd.DataFrame({'height': {0: 2}}).T
df12 = pd.concat([df1, df2])

df3 = pd.DataFrame({'color': {0:'w'}}).T
df4 = pd.DataFrame({'height': {1: 4}}).T
df34 = pd.concat([df3, df4])

# 合并并自动填补缺失值
result = df12.combine_first(df34)
print(result)

输出结果

0  1
color   w  b
height  2  4

方法说明

combine_first()会以调用它的DataFrame(这里是df12)为主体,用传入的DataFrame(df34)中对应位置的非NaN值填补自身的缺失项,同时保留自身已有的有效数据。因为你的两个DataFrame缺失值刚好互补,最终会得到无重复行、无缺失值的结果。

如果两个DataFrame存在重叠的非缺失值,该方法会优先保留调用方的数据。

备选方法

你也可以通过拼接后按行索引分组,聚合提取非缺失值来实现:

result = pd.concat([df12, df34]).groupby(level=0).agg(lambda x: x.dropna().iloc[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:05:23