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

如何为DataFrame中A与Group_id为NaN的行匹配填充Group_id?

解决Pandas DataFrame中基于B、C列匹配填充Group_id的问题

问题重现

先构造你提供的示例DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': ['A-1', np.nan, 'A-2', 'A-3'],
    'B': ['B-1', 'B-2', 'B-2', 'B-4'],
    'C': ['C-1', 'C-2', 'C-2', 'C-4'],
    'Group_id': [1, np.nan, 2, 3]
})

解决方案

这里提供两种简洁的实现方式:

方法一:利用映射字典填充

通过构建(B,C)与Group_id的映射关系,直接匹配填充目标行:

# 构建有效(B,C)到Group_id的映射(仅保留Group_id非空的行)
group_mapping = df.dropna(subset=['Group_id']).set_index(['B', 'C'])['Group_id']

# 标记需要填充的行:A列为空且Group_id为空
target_mask = df['A'].isna() & df['Group_id'].isna()

# 填充Group_id
df.loc[target_mask, 'Group_id'] = df.loc[target_mask, ['B', 'C']].apply(
    lambda row: group_mapping.get((row['B'], row['C'])), axis=1
)

方法二:通过合并匹配填充

利用merge操作将目标行与参考行匹配,完成填充:

# 提取Group_id非空的参考数据
reference_df = df.dropna(subset=['Group_id'])[['B', 'C', 'Group_id']]

# 筛选需要填充的行
target_rows = df[df['A'].isna() & df['Group_id'].isna()]

# 合并匹配获取对应Group_id
matched_rows = target_rows.merge(reference_df, on=['B', 'C'], how='left', suffixes=('', '_ref'))

# 更新原DataFrame的Group_id
df.loc[matched_rows.index, 'Group_id'] = matched_rows['Group_id_ref']

最终结果

两种方法执行后,DataFrame都会变为:

A     B     C  Group_id
0  A-1   B-1   C-1       1.0
1  NaN   B-2   C-2       2.0
2  A-2   B-2   C-2       2.0
3  A-3   B-4   C-4       3.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26