基于另一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完全符合需求:
| ID | Variab | col2 | Value |
|---|---|---|---|
| A2 | 1 | NaN | Ball |
| A2 | 1 | NaN | Ball |
| A3 | 0 | NaN | |
| A3 | 1 | NaN | Sky |
| A4 | 1 | NaN | Bird |
| A3 | 0 | NaN | |
| A3 | 1 | NaN | Sky |
| A4 | 1 | NaN | Bird |
| A3 | 0 | NaN | |
| A3 | 1 | NaN | Sky |
| A4 | 1 | NaN | Bird |
内容的提问来源于stack exchange,提问作者codemunchkin
相关产品推荐
相关产品推荐

