Pandas:如何跨不同结构DataFrame匹配数据并添加新列?
跨结构DataFrame匹配标准评分的实现方案
问题背景
现有两个结构差异的DataFrame:
- df_1(数万行库存表):包含
Color、Size、Shape、rating列 - df_2(数百行宝石标准评分表):以
Color、Size为维度,将不同Shape作为列存储对应标准评分值
需求:为df_1新增standard_rating列,根据每行的Color、Size、Shape从df_2匹配对应值填入(例如df_1中Red、Size2、pear形状的行,需匹配df_2中对应值87)
解决步骤
1. 将df_2转换为长格式(宽表转长表)
df_2是宽表结构(Shape作为列),需要先转为长表,让Shape成为单独的列,才能和df_1的结构对齐进行匹配。
import pandas as pd # 若df_2的Color、Size是索引,先重置索引 if 'Color' not in df_2.columns or 'Size' not in df_2.columns: df_2 = df_2.reset_index() # 宽表转长表 df_2_melted = df_2.melt( id_vars=['Color', 'Size'], var_name='Shape', value_name='standard_rating' )
2. 合并两个DataFrame获取标准评分
通过merge方法,以Color、Size、Shape为匹配键,将转换后的df_2与df_1合并,把标准评分值带入df_1。
# 左连接保留df_1所有行,匹配不到的记录standard_rating会显示NaN df_1 = pd.merge( df_1, df_2_melted, on=['Color', 'Size', 'Shape'], how='left' )
效果验证
转换后的df_2_melted会包含类似(Color='Red', Size='Size2', Shape='pear', standard_rating=87)的行,合并后df_1中对应行的standard_rating列会自动填充为87,完全匹配需求。
内容的提问来源于stack exchange,提问作者gem_quartz
相关产品推荐
相关产品推荐

