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

Pandas:利用列间关联关系填充DataFrame缺失值的需求

基于列间关联填充Pandas DataFrame缺失值

原始DataFrame

Val1Val2
CambridgeMA
NANFL
WashingtonDC
WashingtonNAN
MiamiFL
NANDC
WashingtonDC
MiamiFL

目标DataFrame

Val1Val2
CambridgeMA
MiamiFL
WashingtonDC
WashingtonDC
MiamiFL
WashingtonDC
WashingtonDC
MiamiFL

解决方案

核心思路是先建立两列之间的双向唯一映射关系,再用映射填充对应列的缺失值。

代码实现

import pandas as pd

# 创建原始DataFrame(用pd.NA表示缺失值)
df = pd.DataFrame({
    'Val1': ['Cambridge', pd.NA, 'Washington', 'Washington', 'Miami', pd.NA, 'Washington', 'Miami'],
    'Val2': ['MA', 'FL', 'DC', pd.NA, 'FL', 'DC', 'DC', 'FL']
})

# 从无缺失的行中提取双向映射(去重确保每个值对应唯一关联值)
val1_to_val2 = df.dropna().drop_duplicates().set_index('Val1')['Val2'].to_dict()
val2_to_val1 = df.dropna().drop_duplicates().set_index('Val2')['Val1'].to_dict()

# 填充Val1的缺失值:根据Val2的映射值
df['Val1'] = df['Val1'].fillna(df['Val2'].map(val2_to_val1))
# 填充Val2的缺失值:根据Val1的映射值
df['Val2'] = df['Val2'].fillna(df['Val1'].map(val1_to_val2))

# 查看结果
print(df)

代码说明

  1. 构建映射:通过dropna()过滤掉有缺失值的行,drop_duplicates()确保每个键只对应一个值(避免一对多的冲突),最后转换为字典得到双向映射关系。
  2. 填充缺失值:
    • 当Val1缺失时,用Val2的值去val2_to_val1字典中查找对应的Val1值填充;
    • 当Val2缺失时,用Val1的值去val1_to_val2字典中查找对应的Val2值填充。

执行后即可得到目标DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:17