如何基于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
相关产品推荐
相关产品推荐

