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

如何用Pandas DataFrame列的前有效值填充合并产生的NaN?

解决合并DataFrame后用前值填充NaN的问题

一、用前值填充NaN的实现

你可以直接使用Pandas的ffill()(向前填充)方法,将指定列的NaN用最近的非缺失值填充。修改后的完整代码如下:

import pandas as pd
import numpy as np

dflist = [[1, "a", "b"], [2, "a", "b"], [3, "a", "b"]]
df = pd.DataFrame(dflist)
dflist1 = [[1, "a", "b", "c", "e"], [1, "a", "b", "c", "e"], [2, "a", "b", "c", "e"], [3, "a", "b", "c", "e"], [1, "a", "b", "c", "e"],[4, "a", "b", "c", "e"], [5, "a", "b", "c", "e"]]
df1 = pd.DataFrame(dflist1)
df.columns = ["col1", "col2", "col3"]
df1.columns = ["col1", "col21", "col31", "col45", "col56"]

result = pd.merge(df1, df, how='outer')
# 对col2和col3执行向前填充
result[['col2', 'col3']] = result[['col2', 'col3']].ffill()
print(result)

执行后就能得到你想要的输出:

col1 col21 col31 col45 col56 col2 col3
0     1     a     b     c     e    a    b
1     1     a     b     c     e    a    b
2     1     a     b     c     e    a    b
3     2     a     b     c     e    a    b
4     3     a     b     c     e    a    b
5     4     a     b     c     e    a    b
6     5     a     b     c     e    a    b

ffill()的作用是沿着列的方向,用最近的非NaN值填充后续的缺失值,完全匹配你"用对应列的前一个有效值填充"的需求。

二、修正获取NaN索引的代码

你之前的代码错误在于,result['col3'].isna()[0]是取布尔数组的第一个元素,变成了单个布尔值,导致np.where无法找到正确的NaN位置。正确写法如下:

# 获取col3中NaN的索引
indices = list(np.where(result['col3'].isna())[0])
print(indices)

执行后会输出[5, 6],也就是col3中NaN所在的行索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23