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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:55:18