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

基于另一Dataframe的值按条件填充Pandas Dataframe指定列

解决方案

首先构造测试数据可直接验证效果:

import pandas as pd
import numpy as np

# 构造待填充的示例df
df = pd.DataFrame({
    'ID': ['A2', 'A2', 'A3', 'A3', 'A4', 'A3', 'A3', 'A4', 'A3', 'A3', 'A4'],
    'Variab': [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1],
    'col2': [np.nan]*11
})

# 构造查找表database
database = pd.DataFrame({
    'ID': ['A2', 'A3', 'A4', 'A5', 'A6'],
    'Value': ['Ball', 'Sky', 'Bird', 'Fly', 'Pizza']
})

核心实现代码

方法1:map + where组合(最简洁)

先将查找表转为映射字典,再按条件赋值:

# 生成ID到Value的映射关系
id_value_map = dict(zip(database['ID'], database['Value']))

# 仅为Variab=1的行填充匹配值,其余行留空
df['Value'] = np.where(df['Variab'] == 1, df['ID'].map(id_value_map), '')

方法2:筛选赋值(逻辑更直观)

先初始化空列,再针对符合条件的行单独赋值:

# 初始化Value列为空
df['Value'] = ''
# 仅对Variab=1的行匹配填充
df.loc[df['Variab'] == 1, 'Value'] = df.loc[df['Variab'] == 1, 'ID'].map(id_value_map)

最终输出效果

执行后得到的df完全符合需求:

IDVariabcol2Value
A21NaNBall
A21NaNBall
A30NaN
A31NaNSky
A41NaNBird
A30NaN
A31NaNSky
A41NaNBird
A30NaN
A31NaNSky
A41NaNBird

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:36:05