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

基于Team匹配从参考DataFrame填充目标DataFrame全缺失行的NaN

解决方案:按Team匹配填充全缺失玩家数据

首先我们先还原示例中的输入数据(基于Pandas实现):

import pandas as pd
import numpy as np

# 构建fallback参考表
fallback = pd.DataFrame(
    {
        'Morning': [4, 7, 9],
        'Afternoon': [6, np.NaN, 1],
        'Evening': [13, 9, 2]
    },
    index=['Red', 'Blue', 'Green'])

# 构建players数据表并计算Total列
players = pd.DataFrame({
    'Player': ['Bill', 'Emma', 'Mike', 'Jill'],
    'Morning': [4, np.NaN, np.NaN, np.NaN],
    'Afternoon': [np.NaN, np.NaN, 1, np.NaN],
    'Evening': [13, np.NaN, np.NaN, np.NaN],
    'Team': ['Red', 'Blue', 'Green', 'Red']
})
players['Total'] = players[['Morning', 'Afternoon', 'Evening']].sum(1)

接下来我们通过以下步骤实现需求:筛选出Total为0(即三列数据全部缺失)的行,再根据Team字段匹配fallback表的对应数据填充:

# 筛选需要填充的行:Total为0的玩家行
mask = players['Total'] == 0

# 按Team匹配fallback的数据,批量填充目标列
players.loc[mask, ['Morning', 'Afternoon', 'Evening']] = (
    players.loc[mask, 'Team']
    .map(fallback.to_dict('index'))
    .apply(pd.Series)
)

# 可选:如果不需要Total列,可删除它
players = players.drop(columns='Total')

代码逻辑解释:

  • 筛选条件mask:通过players['Total'] == 0精准识别出三列数据全部缺失的玩家行,避免误填充部分缺失的行。
  • map(fallback.to_dict('index')):将fallback表转换为以Team为键的字典(格式示例:{'Red': {'Morning':4, 'Afternoon':6, ...}, ...}),再通过map把每个玩家的Team对应到字典中的完整数据。
  • apply(pd.Series):把映射得到的字典序列转换为DataFrame格式,刚好匹配需要填充的三列结构,直接赋值给筛选后的行即可完成批量填充。

最终结果:

执行代码后,players数据表会变为:

PlayerMorningAfternoonEveningTeam
Bill4.0NaN13.0Red
Emma7.0NaN9.0Blue
MikeNaN1.0NaNGreen
Jill4.06.013.0Red

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:17:32