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

如何用Pandas从其他行匹配值替换DataFrame中的缺失值?

用匹配值替换Pandas DataFrame中的NaN

嘿,这个需求在数据清洗里太常见了,我给你几个针对性的方案,你可以根据自己的实际场景来选:

1. 基于关联列的分组填充(最常用场景)

如果你的两列是有对应关系的(比如一列是id,另一列是theme,同一个id对应的theme应该一致),那可以按关联列分组,用组内的非空值填充NaN:

# 假设你的DataFrame包含['id', 'theme']两列
# 按id分组,用组内的众数填充(若组内只有一个非空值,直接用该值)
themes['theme'] = themes.groupby('id')['theme'].transform(lambda x: x.fillna(x.mode()[0]))

要是能确定每个分组里只有唯一的非空值,也可以用x.first()或x.last()替代x.mode()[0],效率会更高。

2. 同列前后向填充(适合有序数据)

如果你的数据是按顺序排列的(比如时间序列、有序记录),可以用相邻行的非空值填充:

# 前向填充:用上一行的非空值填充当前NaN
themes['theme'] = themes['theme'].ffill()

# 后向填充:用下一行的非空值填充当前NaN
themes['theme'] = themes['theme'].bfill()

# 组合使用:先前向再后向,确保所有NaN都被覆盖
themes['theme'] = themes['theme'].ffill().bfill()

3. 全局通用值填充(无关联分组时)

如果没有可关联的分组列,就用整列最常见的值(众数)填充NaN:

# 获取theme列的众数
theme_most_common = themes['theme'].mode()[0]
# 填充NaN
themes['theme'] = themes['theme'].fillna(theme_most_common)

4. 列间互补填充(两列互为备份)

如果你的两列是互补的(比如列A的NaN用列B的值填,列B的NaN用列A的值填),可以这么操作:

# 用col2的值填充col1的NaN,再反向填充
themes['col1'] = themes['col1'].fillna(themes['col2'])
themes['col2'] = themes['col2'].fillna(themes['col1'])

# 或者一行搞定整行填充(前提是每行至少有一个非空值)
themes = themes.fillna(method='bfill', axis=1).fillna(method='ffill', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:51