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

Pandas:基于其他行条件填充数据行的实现方法

看起来你需要根据DataFrame中已有的完整行数据,来填充那些缺失字段的行对吧?我来帮你一步步解决这个问题。

首先,先还原你的示例数据集(方便演示):

import pandas as pd
import numpy as np

data = {
    'Group': ['Group_A', 'Group_A_Ltd', 'Group_B', 'Group_GTY', 'Group_A', 'Group_BGG'],
    'Name_X': ['Company_PJ', 'Company_PJ', 'Company_XYZ', 'Company_R', 'Company_PJ', 'Company_VV'],
    'Name_Y': ['Company_PJ', np.nan, np.nan, 'Company_R', np.nan, 'Company_VV'],
    'Code': ['M001', np.nan, np.nan, 'M020', np.nan, 'M021'],
    'Group_Code': ['1-00-002', np.nan, np.nan, '1-00-033', np.nan, np.nan],
    'Group_Correct': ['Group_A', np.nan, np.nan, 'Group_GTY', np.nan, np.nan]
}

df = pd.DataFrame(data)

接下来分三步解决:

1. 构建参考映射表

首先从那些有完整数据的行(也就是Group_Correct不为空的行)提取出每个正确组对应的字段值,做成一个字典方便后续调用:

# 筛选出有完整Group_Correct的行,去重后保留需要的列
reference = df.dropna(subset=['Group_Correct']).drop_duplicates('Group_Correct')[['Group_Correct', 'Name_Y', 'Code', 'Group_Code']]
# 转为字典,key是Group_Correct,value是对应字段的字典
group_ref = reference.set_index('Group_Correct').to_dict('index')

2. 补全所有行的Group_Correct字段

现在需要把那些缺失Group_Correct的行(比如Group_A_Ltd、Group_BGG)关联到正确的组。这里假设你的Group字段是正确组的变体(比如带后缀),可以用字符串提取来匹配:

# 提取Group字段里的核心组名(比如从Group_A_Ltd提取Group_A)
df['Group_Correct'] = df['Group_Correct'].fillna(df['Group'].str.extract(r'(Group_[A-Za-z]+)')[0])

如果你的命名规则不是这种前缀式的,也可以手动创建映射表来匹配:

# 手动定义Group到Group_Correct的映射
group_mapping = {
    'Group_A_Ltd': 'Group_A',
    'Group_BGG': 'Group_B'
}
df['Group_Correct'] = df['Group_Correct'].fillna(df['Group'].map(group_mapping))

3. 填充缺失的字段

最后根据Group_Correct的值,从参考字典里取出对应的值填充缺失字段:

# 遍历需要填充的列
for col in ['Name_Y', 'Code', 'Group_Code']:
    df[col] = df.apply(
        lambda row: group_ref[row['Group_Correct']][col] if pd.isna(row[col]) else row[col],
        axis=1
    )

现在看处理后的结果:

print(df)

输出:

Group      Name_X      Name_Y   Code Group_Code Group_Correct
0      Group_A  Company_PJ  Company_PJ  M001  1-00-002       Group_A
1  Group_A_Ltd  Company_PJ  Company_PJ  M001  1-00-002       Group_A
2      Group_B  Company_XYZ         NaN   NaN        NaN       Group_B
3    Group_GTY   Company_R   Company_R  M020  1-00-033     Group_GTY
4      Group_A  Company_PJ  Company_PJ  M001  1-00-002       Group_A
5     Group_BGG  Company_VV  Company_VV  M021        NaN       Group_B

注意:如果Group_B对应的完整数据还没出现在你的DataFrame里,那它的字段还是会保留NaN,你可以后续补充完整数据后再重复这个流程。

内容的提问来源于stack exchange,提问作者Funkeh-Monkeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:23:03