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

如何基于DataFrame2的查找数据在DataFrame1中创建新列(不合并)

基于查找表在DataFrame中创建新列(不合并DataFrame)

要实现你需要的需求——不用合并两个DataFrame,仅将df2作为查找表给df1添加新列,可以按以下步骤操作:

1. 准备数据

首先导入所需库并定义两个DataFrame:

import pandas as pd
import numpy as np

# 主数据DataFrame
df1 = pd.DataFrame({'Size':["Big", "Medium", "Small"], 'Sold_Quantity':[10, 6, 40]})

# 查找表DataFrame
df2 = pd.DataFrame({'Size':["Big", "Medium", "Small"], 'Sold_Quantiy_Score_Mean':[10, 20, 30]})

2. 核心实现方法:字典映射 + 条件判断

把df2转换成以Size为键的字典,通过映射快速匹配对应均值,再用条件判断生成新列:

# 将df2转换为Size到均值的查找字典
size_to_mean = df2.set_index('Size')['Sold_Quantiy_Score_Mean'].to_dict()

# 直接通过映射+条件判断生成新列,无需中间列
df1['New_Column'] = np.where(
    df1['Sold_Quantity'] < df1['Size'].map(size_to_mean),
    'Below Average Sales',
    'Above Average Sales!'
)

3. 代码解释

  • df2.set_index('Size')['Sold_Quantiy_Score_Mean'].to_dict():把df2的Size列设为索引,再转换为字典,这样可以通过Size值直接查找到对应的均值,完全避免合并操作。
  • df1['Size'].map(size_to_mean):将df1中每个Size值映射到对应的均值。
  • np.where(条件, 满足条件的值, 不满足条件的值):根据判断条件给新列赋值,当Sold_Quantity小于匹配到的均值时标记为“Below Average Sales”,否则标记为“Above Average Sales!”。

可选方法:临时合并(不改变原DataFrame结构)

如果不介意临时生成中间合并结果,也可以用merge快速实现,但最终只会给df1添加新列:

# 临时合并获取对应均值,再判断条件
temp_merge = df1.merge(df2, on='Size', how='left')
df1['New_Column'] = np.where(
    temp_merge['Sold_Quantity'] < temp_merge['Sold_Quantiy_Score_Mean'],
    'Below Average Sales',
    'Above Average Sales!'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:30:46