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

如何在Pandas中基于另一DataFrame的产品匹配重命名列?

调整DataFrame列映射以匹配产品编号对应关系

核心需求

让df1的产品编号与df2完全对应:df1中的Shirts对应Product 1、Pants对应Product 2、Shoes对应Product 3,同时关联各自的价格列。

解决方案

方法1:直接构造目标DataFrame(简单高效)

根据明确的对应关系,从df1中直接提取对应列的数据,构建符合要求的新DataFrame:

import pandas as pd

df1 = pd.DataFrame(data={'Product 1':['Shoes'],'Product 1 Price':[25],'Product 2':['Shirts'],'Product 2 Price':[50],'Product 3':['Pants'],'Product 3 Price':24})

# 按df2的产品编号对应关系重组df1
df1_aligned = pd.DataFrame({
    'Product 1': df1['Product 2'],
    'Product 1 Price': df1['Product 2 Price'],
    'Product 2': df1['Product 3'],
    'Product 2 Price': df1['Product 3 Price'],
    'Product 3': df1['Product 1'],
    'Product 3 Price': df1['Product 1 Price']
})

print(df1_aligned)

输出结构:

Product 1Product 1 PriceProduct 2Product 2 PriceProduct 3Product 3 Price
Shirts50Pants24Shoes25

方法2:动态映射(适配多数据行/复杂场景)

如果df1包含多行数据,或产品对应关系可能变化,可通过映射规则动态整理:

import pandas as pd

df1 = pd.DataFrame(data={'Product 1':['Shoes'],'Product 1 Price':[25],'Product 2':['Shirts'],'Product 2 Price':[50],'Product 3':['Pants'],'Product 3 Price':24})

# 定义产品到目标编号的映射(从df2的结构得出)
product_target_map = {
    'Shirts': 'Product 1',
    'Pants': 'Product 2',
    'Shoes': 'Product 3'
}

# 将df1转为长格式,拆分产品列和价格列的标识
df1_long = df1.melt(var_name='col', value_name='val')
df1_long[['product_id', 'type']] = df1_long['col'].str.split(' ', expand=True)
df1_long['type'] = df1_long['type'].replace({'Price': 'price', None: 'name'})

# 提取产品名称和价格的对应关系
name_map = df1_long[df1_long['type'] == 'name'].set_index('val')['product_id']
price_map = df1_long[df1_long['type'] == 'price'].set_index('product_id')['val']

# 构造新数据
new_data = {}
for product, target_id in product_target_map.items():
    original_id = name_map[product]
    new_data[target_id] = [product]
    new_data[f'{target_id} Price'] = [price_map[original_id]]

df1_aligned = pd.DataFrame(new_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:00:07